Vitest · Assertions พื้นฐาน
`.toBeTruthy()`
ตรวจค่าที่ประเมินเป็น truthy โดยไม่ผูกกับค่ารายละเอียดเกินจำเป็น
toBeTruthy()
toBeTruthy() ตรวจว่าค่าถูกประเมินเป็น truthy ใน JavaScript เหมาะเมื่อ behavior สนใจว่า “มีค่าที่ใช้งานได้” เช่น ได้ Task กลับมาหรือมี token แต่ไม่สนใจค่ารายละเอียดทั้งหมด
กฎสำคัญ
อย่าใช้ truthy กว้างเกินไป
test ที่ผ่านเพราะค่ามีอยู่ อาจยังไม่พบว่า value ผิดรายละเอียด ดังนั้นใช้เมื่อ requirement สนใจ presence จริง ๆ
ให้ matcher ตรงกับคำถาม
เลือกวิธีตรวจจาก behavior ที่ต้องการ ไม่เลือกจากชื่อที่ดูคุ้นหรือสั้นที่สุด
แกะตัวอย่างทีละขั้น
อย่าอ่าน matcher เป็นคำสั่งเดี่ยว ให้ตามเส้นทางของข้อมูลจาก input ไป actual แล้วดูว่า matcher ตัดสิน actual อย่างไร ตารางนี้แยกสามช่วงของตัวอย่างออกจากกันเพื่อช่วยให้เริ่มอ่านได้ทีละส่วน
| ขั้น | สิ่งที่เกิดขึ้น |
|---|---|
| เตรียมรายการ | สร้าง Task ที่มี id 1 ให้ค้นหา |
| เรียก function | `findTask(tasks, 1)` คืน Task หรือค่าอื่นที่มีอยู่ |
| ตรวจ presence | `.toBeTruthy()` ตอบว่ามีค่าที่นำไปใช้งานต่อได้ ไม่ได้ตรวจรายละเอียดทุก field |
ถ้าแก้ค่าตั้งต้นในตัวอย่าง ให้ถามต่อว่า toBeTruthy() ยังตรงกับคำถามเดิมหรือไม่ ตัวอย่างที่ดีไม่ได้แค่ทำให้ test ผ่าน แต่ทำให้เราเข้าใจว่ากำลังพิสูจน์ behavior ใด
Truthy ไม่เท่ากับ exact behavior
| สถานการณ์ | วิธีคิด |
|---|---|
| สนใจแค่ว่าค้นหาเจอ | toBeTruthy() |
| สนใจว่าเป็น Task id ใด | ตรวจ property ด้วย toBe หรือ object ด้วย toEqual |
| ต้องการแยก null/undefined อย่างชัดเจน | ใช้ matcher เฉพาะในบทถัดไป |
อย่าตรวจเกิน contract
ถ้า requirement สนใจเฉพาะ property หรือ state หนึ่งอย่าง ให้ตรวจเท่านั้น การ assert รายละเอียดที่ไม่ใช่สัญญาจะทำให้ test เปราะโดยไม่เพิ่มความมั่นใจ
แบบฝึก: เลือกและเขียน matcher
ตรวจว่าการค้นหา Task ที่มี id คืนค่าบางอย่างกลับมา
งานที่ต้องทำ
- สร้างรายการ Task ที่มี id 1
- เรียก findTask ด้วย id 1
- ตรวจว่าผลลัพธ์เป็น truthy
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด