Supertest · คำขอ HTTP แรก
รอผลลัพธ์จาก Request
อ่าน response แบบ asynchronous โดยไม่ปล่อยให้ test จบก่อน request
request chain เป็น asynchronous
HTTP request ใช้เวลาและคืน Promise ในรูปแบบที่เรา await ได้ ถ้าไม่คืนหรือ await request runner อาจจบ test ก่อน response กลับมา ทำให้ test ผ่านแบบไม่มี assertion หรือเกิด open handle
เลือก callback หรือ Promise ให้ชัด
| รูปแบบ | ข้อดี | ข้อควรระวัง |
|---|---|---|
| return request(...).expect(200) | สั้นและให้ runner รอ Promise | ไม่สะดวกเมื่อมี assertion หลายชุด |
| async + await | อ่านลำดับ request/response ชัด | ต้อง await ทุก request ที่มีผลต่อ test |
| .end(callback) | ใช้กับ API callback ระดับล่างได้ | ต้องจัดการ error และ done เอง |
กฎสำคัญ
completion
ห้ามผสม done กับ await โดยไม่จำเป็น
เลือก completion style เดียวใน test หนึ่งข้อ เพื่อลดโอกาสให้ runner รอซ้ำหรือจบผิดจังหวะ
ordering
await ทุก request ที่เป็น Arrange
ถ้า create fixture ไม่เสร็จก่อน GET ถัดไป ผลลัพธ์จะขึ้นกับ timing และกลายเป็น flaky