Vitest · Assertions พื้นฐาน
`.toBeFalsy()`
ตรวจค่าที่ประเมินเป็น falsy เช่นค่าว่างหรือศูนย์
toBeFalsy()
toBeFalsy() ตรวจว่าค่าถูกประเมินเป็น falsy เช่น false, 0, "", null หรือ undefined เหมาะกับสถานะที่ requirement มองว่าไม่มีค่า ไม่เปิดใช้งาน หรือไม่สำเร็จ แต่ต้องระวังว่ามันรวมหลายค่าเข้าด้วยกัน
ตรวจสถานะ boolean ที่ควรเริ่มเป็น false
กฎสำคัญ
falsy รวมหลายค่า
ถ้า 0 หรือสตริงว่างถือเป็นค่าที่ถูกต้องใน domain อย่าใช้ toBeFalsy เพราะ test อาจผ่านทั้งที่ไม่ได้ตรวจ behavior ที่ตั้งใจ
ให้ matcher ตรงกับคำถาม
เลือกวิธีตรวจจาก behavior ที่ต้องการ ไม่เลือกจากชื่อที่ดูคุ้นหรือสั้นที่สุด
แกะตัวอย่างทีละขั้น
อย่าอ่าน matcher เป็นคำสั่งเดี่ยว ให้ตามเส้นทางของข้อมูลจาก input ไป actual แล้วดูว่า matcher ตัดสิน actual อย่างไร ตารางนี้แยกสามช่วงของตัวอย่างออกจากกันเพื่อช่วยให้เริ่มอ่านได้ทีละส่วน
| ขั้น | สิ่งที่เกิดขึ้น |
|---|---|
| สร้าง Task | เรียก `createTask` ซึ่งควรเริ่มด้วยสถานะยังไม่เสร็จ |
| เลือก property | หยิบ `task.completed` ซึ่งเป็นค่าที่ต้องการตรวจ |
| ตรวจ falsy | `.toBeFalsy()` ผ่านเมื่อค่าถูกประเมินเป็น false ใน JavaScript |
ถ้าแก้ค่าตั้งต้นในตัวอย่าง ให้ถามต่อว่า toBeFalsy() ยังตรงกับคำถามเดิมหรือไม่ ตัวอย่างที่ดีไม่ได้แค่ทำให้ test ผ่าน แต่ทำให้เราเข้าใจว่ากำลังพิสูจน์ behavior ใด
Truthy และ falsy ต้องสื่อความหมาย
| สถานการณ์ | วิธีคิด |
|---|---|
| ต้องเป็น false เท่านั้น | toBe(false) ชัดกว่า |
| ค่าใด ๆ ที่หมายถึงไม่มีสถานะ | toBeFalsy() |
| ต้องแยก null กับ undefined | ใช้ matcher เฉพาะ ไม่ใช้ falsy แทน |
อย่าตรวจเกิน contract
ถ้า requirement สนใจเฉพาะ property หรือ state หนึ่งอย่าง ให้ตรวจเท่านั้น การ assert รายละเอียดที่ไม่ใช่สัญญาจะทำให้ test เปราะโดยไม่เพิ่มความมั่นใจ
แบบฝึก: เลือกและเขียน matcher
เลือกใช้ toBeFalsy เฉพาะเมื่อโจทย์สนใจสถานะที่ไม่ active
งานที่ต้องทำ
- สร้าง Task ใหม่
- เลือก property completed ที่เริ่มเป็น false
- ตรวจว่า property นี้เป็น falsy
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด