เริ่มต้นด้วยการทำความรู้จักโครงสร้างของการเขียน unit testing กันก่อนเลย
ใน jest และ test library ของภาษาอื่นๆ นั้นจะคล้ายๆ กัน โดยมีโครงสร้างแบบนี้
หากว่ามีหลายๆ test แล้วต้องการจัดกลุ่มให้มัน เราจะใช้ describe
โครงสร้างการเขียน test
ในการเขียน test นั้น แนะนำให้ใช้สิ่งที่เรียกว่า 3A คือ
- Arrange: การเตรียมการก่อนเริ่มทดสอบ
- Action: การเรียกใช้งาน Function หรือ การทำอะไรสักอย่าง เพื่อให้ได้ผลการทดสอบ
- Assert: การตรวจสอบความถูกต้อง
หน้าตามันเป็นแบบนี้
การทดสอบแบบ Asynchronous
เป็นเรื่องปกติใน JavaScript โค้ดที่เราเขียน จะมีการทำงานแบบ asynchronous และเมื่อโค้ดของเรามีการทำงานแบบ asynchronous ตัว jest จำเป็นต้องรู้ว่าโค้ดที่กำลังทดสอบเสร็จสมบูรณ์เมื่อไหร่ ก่อนที่จะสามารถไปยังการทดสอบอื่นได้
โดย Jest มีหลายวิธีในการจัดการเรื่องนี้
Promises
การ return ค่า แบบ promise ภายใน code ของเรา jest จะรอให้ promise นั้น resolve ก่อน แต่ถ้าหากมีการ rejected จาก promise เท่ากับว่าการทดสอบนั้นล้มเหลว
หากเราต้องการทดสอบ reject
ของ promise ให้ใช้วิธี .catch
expect.assertions
ใส่เข้ามาเพื่อตรวจสอบว่า มีการเรียกการเรียกใช้งานจริงๆ หากเราไม่ได้ใส่มันเข้าไปด้วย การทดสอบมันจะไม่ fail
Async/Await
เราสามารถใช้ async
และ await
ในการทดสอบของเราได้ หากต้องการเขียนการทดสอบแบบ async ให้ใช้คีย์เวิร์ด async
หน้าฟังก์ชันที่ผ่านการทดสอบ
ตัวอย่าง เช่น สถานการณ์จำลอง fetchData
เดียวกัน สามารถทดสอบได้ด้วย:
expect.assertions(1)
ใช้เพื่อตรวจาสอบว่า assertions ถูกเรียกหรือเปล่า
หรือ เราสามารถรวม async
และ await
กับ .resolves
หรือ .rejects
ก็ได้
Callbacks
ถ้าหากเราต้องการทดสอบ function ที่มีการใช้ callback นั้น ก็สามารถ ใช้งานได้ ดังนี้