เวลาที่เราพัฒนาเว็บไซต์ด้วย React หรือ NextJS นั้น เป็นเรื่องปกติที่ต้องมีการประกาศฟังก์ชั่นบางอย่างภายใน component ไม่ว่าจะเป็น ฟังก์ชั่นที่เราสร้างขึ้นมาเอง เพื่อทำงานบางอย่าง หรือ ฟังก์ชั่น hooks ต่างๆ ที่ library มีใช้เรียกใช้งาน
หน้าตามันก็จะประมาณนี้
ซึ่งถ้าหากว่าเราต้องการทดสอบพฤติกรรมของ component นี้ โดยใช้ Cypress ก็สามารถทำได้ โดยง่าย
หรือถ้าหากอยากที่จะทดสอบพฤติกรรมการทำงานของ component นี้ก็สามารถทำได้ด้วยเช่นกัน
แล้วถ้าหากว่าเราอยากจะทดสอบการทำงานเฉพาะ custom hook หละ จะทำยังไง... หลังจากที่ลองทำดูก็พบวิธีการทดสอบ
Custom Hook
ซึ่งอย่างที่รู้กัน (มั้งนะ) ว่าเราสามารถที่จะแยกเอาส่วน hooks ของ library และฟังก์ชั่นต่างๆ ที่เราเขียนไว้ แยกออกมาเป็น custom hook อีกตัวหนึ่งได้ เพื่อให้ง่ายต่อการใช้งานและปรับปรุงแก้ไขในอนาคต (และทดสอบ)
เท่านี้เราก็สามารถเริ่มทดสอบ ฟังก์ชั่นต่างๆ ภายใน useCounter ได้แล้ว
ทดสอบ Custom Hook ผ่าน Component
โดยปกติแล้ว ถ้าหากเราต้องการทดสอบ hook เราจะต้องทำสอบผ่านทาง component แบบนี้
แล้วถ้าเราอยากทดสอบ custom hook โดยไม่ผ่าน component จริงๆ ที่เรียกมใช้งาน ก็สามารถทำได้โดยการ Mock Component ขึ้นมาเพื่อ เรียกใช้งาน hooks ที่ต้องการทดสอบ
การทดสอบด้วยวิธีนี้ จะต่างจากวิธีแรก ตรงที่ ใน mock component จะ return ค่ากลับเป็น null แทน html และต้องสร้างตัวแปรขึ้นมาเพื่อรับค่าจาก hooks (useCounter) ด้วย
อีกอย่างที่แตกต่างกันคือ การ mount และ assert ค่า จะถูกเปลี่ยนเป็น assert ใน then แทน