Vitest · โครงสร้างของ Test
การตั้งชื่อ Test
ตั้งชื่อ `describe()` และ `test()` ให้สื่อ expected behavior
ชื่อ test คือ documentation ที่รันได้
เมื่อ test fail คนแรกที่เห็นปัญหามักเห็นชื่อ test ก่อน source code ชื่อที่ดีจึงควรบอก behavior, เงื่อนไขที่สำคัญ และผลลัพธ์ที่คาดหวัง โดยไม่ต้องอ่าน implementation เพื่อแปลความหมาย
ชื่อในตัวอย่างใช้ technical identifiers เป็นภาษาอังกฤษตาม convention ของ source code
| ชื่อที่อ่อน | ชื่อที่ช่วย debug |
|---|---|
| works | returns the matching task when the id exists |
| handles missing | returns undefined when the id does not exist |
| task test | keeps the original title when completing a task |
ชื่อที่ดีช่วยลดเวลาตอน fail
ถ้าเห็นชื่อ `works` ใน output เราต้องเปิด source แล้วเดาเองว่าพังตรงไหน แต่ถ้าเห็นชื่อที่บอกเงื่อนไขและผลลัพธ์ เราจะเริ่มตรวจได้ตรงจุดมากขึ้น ชื่อ test จึงเป็นเอกสารที่ถูกตรวจซ้ำได้ทุกครั้งที่รัน
จากชื่อเรารู้ทันทีว่ากำลังตรวจกรณี id ไม่พบ ไม่ต้องอ่าน test ทุกข้อเพื่อเดาว่า behavior ใดล้มเหลว
ตั้งชื่อโดยไม่ผูก implementation
ชื่อ test ควรพูดถึงสิ่งที่ผู้ใช้หรือ caller พึ่งพา ไม่ควรพูดว่า “เรียก find” หรือ “ใช้ spread” เพราะ implementation เปลี่ยนได้โดย behavior ยังถูกต้องอยู่
กฎสำคัญ
บอก expected result
ใช้คำอย่าง returns, keeps, rejects หรือ calls เมื่อคำเหล่านี้ตรงกับ behavior ที่ต้องการ
บอกเงื่อนไขที่มีผล
เช่น when the id exists หรือ when the title is empty ทำให้แต่ละกรณีแยกจากกัน
ไม่รวมหลาย behavior
ชื่อที่มี and หลายเรื่องมักเป็นสัญญาณว่าควรแยก test
แบบฝึก: ปรับชื่อที่อ่านยาก
เปลี่ยนชื่อที่กว้างเกินไปให้สื่อ expected behavior ของ Task service
งานที่ต้องทำ
- เปลี่ยน task works เป็นกรณีที่ id มีอยู่
- เปลี่ยน empty เป็นกรณีที่ id ไม่พบ
- เปลี่ยน complete เป็น behavior ที่เกิดกับ Task
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด