กรณีที่ใน service มีการ chain คำสั่งต่อกันเรื่อยๆ เช่น create user service ที่ในนั้นต้อง เช็ค email ซ้ำมั้ย จากนั้นจึงเช็คว่าเบอร์ซ้ำมั้ย แล้วค่อยไป hash password แล้วค่อยไป save ลง db ถ้าแบบนี้เราจะทำ unit test ยังไงหรอครับ รวมถึงกรณีที่ service เราไปยุ่งเกียวกับหลายๆ table และต้องทำงานสำเร็จทุก table หรือพวกการใช้ transaction อะไรพวกนี้ทำ unit test ยังไงบ้างครับ ตอนนี้ใช้ nestjs prisma อยู่ครับ ติดอยู่ตรงนี้หาดูก็ไม่มีเลยครับ
เยี่ยม ขอบคุณคลิปดีๆครับ
กรณีที่ใน service มีการ chain คำสั่งต่อกันเรื่อยๆ เช่น create user service ที่ในนั้นต้อง เช็ค email ซ้ำมั้ย จากนั้นจึงเช็คว่าเบอร์ซ้ำมั้ย แล้วค่อยไป hash password แล้วค่อยไป save ลง db ถ้าแบบนี้เราจะทำ unit test ยังไงหรอครับ รวมถึงกรณีที่ service เราไปยุ่งเกียวกับหลายๆ table และต้องทำงานสำเร็จทุก table หรือพวกการใช้ transaction อะไรพวกนี้ทำ unit test ยังไงบ้างครับ ตอนนี้ใช้ nestjs prisma อยู่ครับ ติดอยู่ตรงนี้หาดูก็ไม่มีเลยครับ
อะไรที่เราทำ test แล้วก็ข้ามไปได้ครับ
ตย create user service
- hash password (ด้วย logic เราสมมุติ)
- save by prisma
เราก็ mock ว่า hash password ได้ค่า ABBAA
เราก็ mock ว่า save by prisma ได้ค่า UserObject
และ unit-test assert ว่า
- hash password ถูก call
- save by prisma ถูก call ( ด้วย hashPassword ABBAA )
อย่าลืมทำ unit-test ของ hash password เพราะเป็น logic เรา
โดยเราเชื่อว่า save by prisma เค้าทำ unit-test มาแล้วเราก็ไม่ต้องทำ
------
เพื่อให้ครอบคลุมสามารถ mock save by prisma ให้ throw error ได้นะครับเพื่อเป็นเคส save ล้มเหลว
ผมลืมอธิบายไป เมื่อเราเทส 1 2 3 แล้ว พอ มาฟังชันที่ 4 ที่เราไม่จำเป็น ต้องเทส 1 2 3 อีกครั้งเพราะเราได้เทสไปแล้ว ในการเทสเราจึงจะโฟกัสแค่การทำงานของ 4 เท่านั้นครับ