1. ภาพรวม
- แชร์วิธีสร้างการทดสอบแบบหน่วยด้วยแนวทาง Sociable Test (เชื่อมต่อกับ DB จริง)
- ORM อย่าง TypeORM มีปัญหาเรื่อง type safety จึงจำเป็นต้องมีการทดสอบโดยใช้ DB จริง
2. Solitary Test vs Sociable Test
- การเปรียบเทียบ
- Solitary Test ทดสอบแบบแยกอิสระโดยแทนที่ dependency ด้วย Mock (รวดเร็วแต่มีโอกาสแตกต่างจากสภาพแวดล้อมจริง)
- Sociable Test ทดสอบร่วมกับ external dependency จริง (DB) จึงช่วยเพิ่มความน่าเชื่อถือได้ (ช้ากว่าแต่ค้นพบปัญหาที่ใกล้เคียงของจริงได้ตั้งแต่เนิ่น ๆ)
- ข้อจำกัดของ Solitary Test
- การ mocking ทำให้ตรวจพบปัญหาในการโต้ตอบกับ DB จริงได้ไม่ครบถ้วน
- ปัญหาการตรวจเช็ก type ของ TypeORM อาจทำให้เกิด runtime error ได้
- ความจำเป็นของ Sociable Test
- การเชื่อมต่อกับ DB จริงช่วยตรวจสอบปัญหาของ query ที่ซับซ้อน, transaction และการตั้งค่า relation ได้
- สามารถตั้งค่า test database และทดสอบการแยกข้อมูลด้วยวิธี transaction ได้
- ข้อดีและข้อควรระวังของ DB Sociable Test
- ข้อดี: การทดสอบที่น่าเชื่อถือสูง, พบปัญหาที่เกี่ยวกับ ORM ได้เร็ว, ตรวจสอบ schema ไม่ตรงกันได้
- ข้อควรระวัง: ความเร็วในการทดสอบลดลง, การตั้งค่าสภาพแวดล้อมซับซ้อน, ต้องจัดการ transaction
3. การทำ testing ที่เชื่อมต่อ DB ใน NestJS
- การตั้งค่า
- ตั้งค่าการเชื่อมต่อ test DB ด้วย MySQL
- ใช้ transaction เพื่อ rollback การเปลี่ยนแปลงของแต่ละการทดสอบ
- ใช้ lifecycle ของเฟรมเวิร์กทดสอบ Jest
- ใช้ beforeAll / beforeEach / afterEach / afterAll
- ตั้งค่าการเริ่มต้นและการเชื่อมต่อ DB รวมถึงการเริ่มและสิ้นสุด transaction
4. สรุป
- เวลาสร้าง unit test ควรผสมผสานการใช้ Solitary Test และ Sociable Test ให้เหมาะสม
- Sociable Test สามารถช่วยได้มากในการป้องกันปัญหาที่เกี่ยวข้องกับ ORM
ยังไม่มีความคิดเห็น