Supertest · Test Database และ Module Boundary
Override Provider ด้วย Fake
ควบคุม external dependency หนึ่งตัวผ่าน NestJS provider override
override dependency ที่ไม่ควรเรียกจริง
E2E ของ Todo ควรใช้ PostgreSQL จริงตาม boundary แต่ external email, payment หรือ third-party API ไม่ควรถูกเรียกจริงในทุก test ใช้ `overrideProvider()` เปลี่ยน dependency เฉพาะจุดเป็น fake ที่ deterministic
override external providerTS
ยังใช้ TodoModule จริง แต่ควบคุม side effect ที่อยู่นอก boundary
fake ต้องรักษา dependency contract
| สิ่งที่ fake ควรทำ | สิ่งที่ fake ไม่ควรทำ |
|---|---|
| คืน shape ที่ application คาด | คืน response ที่ไม่มีทางเกิดจริง |
| ควบคุม failure ที่ต้องการทดสอบ | กลืน error ทุกชนิดจนไม่เห็น bug |
| บันทึก call สำคัญเพื่อ assert | กลายเป็น implementation ที่ test หลักต้องรู้ทั้งหมด |
กฎสำคัญ
scope
fake external ไม่ใช่ fake database
อย่าใช้หลักนี้เป็นเหตุผลในการเปลี่ยน PostgreSQL หลักของ Todo เป็น in-memory หากเป้าหมายคือ persistence E2E
order
override ก่อน compile
การเปลี่ยน provider ต้องอยู่ใน builder chain ก่อน `compile()` เพื่อให้ dependency graph ใช้ค่าที่ override