Vitest · เริ่มคิดแบบ Test
Assertion คืออะไร
ทำความเข้าใจ expected result, actual result และการยืนยันผลลัพธ์
Assertion คือประโยคยืนยัน
Assertion คือการเปลี่ยน expected behavior ให้เป็นเงื่อนไขที่เครื่องตรวจได้ เช่น “ผลลัพธ์ควรเป็น Task ที่เสร็จแล้ว” เมื่อเขียน test เราจะมี actual value คือค่าที่โปรแกรมคืนจริง และ expected value คือค่าหรือเงื่อนไขที่เราคาดหวัง
แยก actual กับ expected ให้เห็นก่อน
ให้คิดว่า actual คือคำตอบที่โปรแกรมส่งกลับมา ส่วน expected คือคำตอบที่ requirement บอกว่าควรเป็น ทั้งสองคำไม่ได้หมายความว่าเราต้องสร้าง object สองชุดเสมอไป แต่เป็นการแยกมุมมอง “เกิดอะไรขึ้นจริง” กับ “ควรเกิดอะไรขึ้น”
เมื่อใช้ Vitest เราจะไม่ต้องใช้ console.log เพื่อดูเองทุกครั้ง แต่จะส่ง actual เข้า expect แล้วบอก matcher ว่า expected ควรมีลักษณะอย่างไร แนวคิดสองฝั่งนี้จะยังเหมือนเดิมแม้ syntax เปลี่ยน
Assertion ที่ดีต้องวัดผลได้
| คำถามที่คลุมเครือ | คำถามที่วัดผลได้ |
|---|---|
| ฟังก์ชันทำงานดีไหม | เมื่อส่ง Task ที่ยังไม่เสร็จ ผลลัพธ์มี `completed` เป็น true |
| ระบบโอเคหรือไม่ | เมื่อค้นหา id ที่ไม่มีอยู่ ผลลัพธ์ไม่มี Task |
| ข้อมูลถูกไหม | Task ที่คืนมี `id` และ `title` เดิม แต่สถานะเปลี่ยนเป็นเสร็จแล้ว |
กฎสำคัญ
เริ่มจาก actual
ระบุว่าค่าที่โปรแกรมคืนจริงคืออะไร ก่อนเลือกวิธีตรวจ
เขียน expected ให้แคบพอดี
ตรวจเฉพาะ contract ที่สำคัญ อย่าเพิ่มรายละเอียดที่ requirement ไม่ได้สัญญาไว้
เมื่อ fail ต้องแปลผลได้
ข้อความและข้อมูลที่ตรวจควรช่วยบอกว่าระบบเบี่ยงจาก behavior ตรงไหน
แบบฝึก: เขียน expected behavior
เขียน actual, expected และเหตุผลของการตรวจสำหรับ `findTask` โดยยังไม่ต้องใช้ matcher
งานที่ต้องทำ
- เลือก input เป็นรายการ Task สองรายการและ id ที่มีอยู่
- ระบุ actual value ที่ function ควรคืน
- ระบุ expected behavior ที่ทำให้รู้ว่าค้นหาถูกตัว
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด