Vitest · Async Tests
Async Test Callback
ใช้ `async` กับ callback ของ test เพื่อรองรับ Promise
ให้ callback รู้ว่ามี Promise
ถ้า function ที่ทดสอบคืน Promise callback ของ test ควรเป็น async เพื่อให้เราใช้ await ภายในได้ เมื่อ callback เป็น async มันจะคืน Promise ให้ Vitest รอจนเสร็จก่อนสรุปว่า test ผ่านหรือ fail
กฎสำคัญ
Promise ต้องอยู่ในเส้นทางที่ test รอ
ถ้าเรียก async function แล้วไม่ await หรือไม่คืน Promise ให้ Vitest test อาจจบก่อน behavior จริง
แยก async flow จาก assertion
รอผลลัพธ์ให้พร้อมก่อน แล้วค่อยตรวจค่าด้วย matcher ที่ตรงกับ behavior
ตามลำดับเวลาของ async test
คำว่า async ไม่ได้แปลว่า Vitest จะเดาเองว่าต้องรอทุกอย่าง เราต้องทำให้ Promise อยู่ในค่าที่ callback คืนกลับมา หรือใช้ await ภายใน callback เพื่อให้จุดจบของ test อยู่หลัง behavior ที่ต้องการตรวจ
แบบฝึก: เขียน callback แบบ async
เติม async callback และ await ให้ test ตรวจ id ที่โหลดกลับมา
งานที่ต้องทำ
- ทำ callback ของ test ให้เป็น async
- await loadTask(3)
- ตรวจ id ที่ได้ด้วย toBe
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด