Supertest · Test Database และ Module Boundary
Cleanup และ Reset
ล้างข้อมูลระหว่าง test เพื่อไม่ให้ state รั่วข้ามกรณี
ล้าง state เพื่อป้องกัน test รั่ว
เมื่อ test หนึ่งสร้าง Todo แล้ว test ถัดไปเห็นข้อมูลนั้นโดยไม่ตั้งใจ ผลลัพธ์จะขึ้นกับลำดับการรัน การ cleanup ต้องล้าง child rows ก่อน parent rows ตาม foreign key และทำให้ state ก่อนแต่ละกรณีคาดเดาได้
cleanup ก่อนแต่ละ testTS
ลำดับจริงต้องสอดคล้องกับ relation และ foreign key ของ schema
cleanup strategy มี trade-off
| strategy | ข้อดี | ข้อควรระวัง |
|---|---|---|
| deleteMany | เข้าใจง่ายและตรงกับ row state | อาจช้าถ้าข้อมูลเยอะ |
| transaction rollback | เร็วและ isolate ได้ดี | ต้องควบคุม connection/transaction boundary |
| drop/recreate schema | สะอาดมาก | ช้าและเหมาะกับ suite/CI มากกว่าแต่ละ test |
i
อย่าใช้ cleanup ที่ไม่ตรวจผล
ถ้า cleanup fail แล้ว test ต่อด้วย state เก่า failure ที่เกิดภายหลังจะหลอกให้ debug ผิดจุด ให้ปล่อย cleanup error ทำให้ suite fail