Vitest · โครงสร้างของ Test
Arrange, Act, Assert
แบ่ง test เป็นช่วงเตรียมข้อมูล เรียก behavior และตรวจผลลัพธ์
โครงสร้างสามช่วงของ test
Arrange, Act, Assert หรือ AAA เป็นวิธีจัดลำดับ test ให้คนอ่านเห็น input, action และ expected result แยกกันชัดเจน ไม่ใช่ API ของ Vitest แต่เป็นวินัยการเขียนที่ช่วยให้ test ไม่กลายเป็นก้อนคำสั่งที่ต้องเดา
กฎสำคัญ
Arrange เตรียมเฉพาะสิ่งที่ใช้
fixture ควรเล็กพอให้เห็น input สำคัญ ไม่สร้างข้อมูลเกินโจทย์
Act ควรเห็น action หลัก
แยกการเรียก function ออกจากการตรวจ เพื่อรู้ว่า behavior ที่กำลังพิสูจน์คืออะไร
Assert ต้องตอบคำถาม
ตรวจ expected behavior ที่ชื่อ test สัญญาไว้ ไม่เพิ่ม assertion ที่ไม่เกี่ยวข้อง
เดินตาม test ด้วยคำถามสามข้อ
เวลาเจอ test ที่อ่านยาก ให้ถามทีละข้อ: Arrange เตรียมข้อมูลอะไร, Act เรียก behavior ใด, Assert จะตัดสินจากหลักฐานอะไร การถามสามข้อนี้ช่วยให้ผู้เริ่มต้นไม่หลงไปกับชื่อ API ก่อนเข้าใจลำดับการทำงาน
โดยทั่วไป Arrange และ Assert ไม่ควรซ่อนรายละเอียดสำคัญไว้ไกลจาก test ส่วน Act ควรเห็นชัดว่าเรียก function ใด เพราะนั่นคือ behavior ที่ชื่อ test กำลังพูดถึง
แบบฝึก: แบ่งโค้ดเป็น AAA
นำคำสั่งที่ให้ไปวางใน Arrange, Act และ Assert ตามลำดับ
งานที่ต้องทำ
- ย้าย object Task ไปไว้ใน Arrange
- ย้ายการเรียก completeTask ไปไว้ใน Act
- เขียนบรรทัด Assert เป็น comment ที่บอก behavior
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด