จากการแบ่งปันความรู้เรื่องการพัฒนาระบบ API ด้วย NodeJS นั้น
มีคำถามเกี่ยวกับแนวทางในการทดสอบว่า
- มีแบบไหนบ้าง
- ทำอย่างไรบ้าง
จึงทำการสรุปในแบบที่เคยทำไว้บ้าง ดังนี้
โดยปกติชอบแบ่งการทดสอบเป็น 2 แบบ คือ
- ทดสอบมุมมองของผู้ใช้งาน หรือ ภายนอก (External test) มักจะใช้เครื่องมือ หรือ ภาษาโปรแกรมต่างจากการพัฒนา
- ทดสอบในมุมมองนักพัฒนา หรือ ภายใน (Internal test) มักจะใช้เครื่องมือ หรือ ภาษาโปรแกรมเดียวกับการพัฒนา
แบบที่ 1 External test
จะใช้งาน Postman + newman สำหรับการทดสอบ API แบบง่าย ๆ
แบบที่ 2 Internal test
สำหรับ API test นั้นสามารถแบ่งได้หลาย level ดังนี้
- Unit test
- Component test
- Contract test
- Integration test
- End-to-End test
ขึ้นอยู่กับความเชื่อมั่น หรือ ความต้องการของระบบงาน และ การทดสอบ
แน่นอนว่ามีทั้งข้อดีและข้อเสีย
ยิ่งเป็นพวก integration และ end-to-end test ก็จะยิ่งเพิ่มความเชื่อมั่นสูงสุด
แต่ต้องระวังในเรื่องของความเร็วในการทดสอบว่า ช้า หรือ เร็ว
รวมทั้งเรื่องของการจัดการ environment/dependency
เพื่อไม่ให้การทดสอบไม่เสถียร
ส่วน unit, component และ contract นั้น
จะทดสอบได้เร็วมาก ๆ แต่ความเชื่อมันของระบบโดยรวมอาจจะน้อย
ตัวอย่างและวิธีการทดสอบเป็นดังนี้
Production code เป็นการดึงข้อมูล user ด้วย id
[gist id="4e153460662727cf5961935620549fd1" file="user.js"]Unit test ด้วย Jest
สามารถทำการ mock ตัว axios ได้เลย
จากนั้นก็สามารถจำลอง response ได้เลย
Component test ด้วย SuperTest และ Nock
ทำการทดสอบ API ด้วยการ start server และ ยิง request ด้วย SuperTest
และทำการจำลองการยิง request ไปยัง external API ด้วย Nock
ซึ่งกำหนดพฤติกรรมการทำงานให้เหมือนจริงได้ ในกรณีต่าง ๆ
ตัวอย่างการใช้งาน
[gist id="4e153460662727cf5961935620549fd1" file="test-02.js"]ลองนำไปใช้งานกันดูครับ
ขอให้สนุกกับการ coding