Arrange, Act, Assert (AAA)
บทนี้พาใช้โครง AAA กับ Vitest แบบใช้งานจริง เพื่อให้ test อ่านง่ายขึ้น แก้ไขง่ายขึ้น และรู้ชัดว่า fail เพราะช่วงเตรียมข้อมูล, ช่วงเรียก behavior, หรือช่วงตรวจผลลัพธ์
Step 1
Step 1: ทำความเข้าใจ AAA แบบสั้นที่สุด
AAA เป็นรูปแบบเขียน test ที่นิยมมากเพราะช่วยแยกหน้าที่ใน test case ให้ชัด: `Arrange` เตรียมข้อมูลเริ่มต้น, `Act` เรียก behavior ที่ต้องการทดสอบ, และ `Assert` ตรวจว่าผลลัพธ์ตรงตามที่คาดไว้
ตัวอย่างโครงเปล่าที่ใช้ได้กับหลายสถานการณ์ ก่อนเติม logic จริงของระบบ
Step 2
Step 2: ใช้ AAA กับตัวอย่างที่ใกล้ของจริง
เมื่อ test เริ่มมี input และผลลัพธ์มากขึ้น การคั่นช่วงด้วย AAA จะช่วยให้คนอ่านรู้ทันทีว่าบริบทเริ่มต้นคืออะไร เรากำลังรันอะไร และคาดหวังอะไรจากผลลัพธ์
ตัวอย่างนี้แยก input, action และการตรวจผลลัพธ์ให้เห็นเป็นคนละช่วงชัดเจน
Step 3
Step 3: anti-pattern ที่เจอบ่อยเมื่อยังไม่แยก AAA
หนึ่งในปัญหาที่พบบ่อยคือ test เดียวตรวจหลาย behavior จนอ่านยาก และเวลา fail จะไม่ชัดว่าพังตรงความคาดหวังส่วนไหน การแยก AAA ช่วยเห็นปัญหานี้เร็วขึ้น
ตัวอย่างนี้ตั้งใจทำให้เห็นว่า test เดียวมีหลาย assert และหลาย intent จนดูแลยาก
Step 4
Step 4: refactor เป็น AAA + one behavior per test
หลัง refactor เราแยก test ตาม behavior และคงรูป AAA ในแต่ละเคส ผลคืออ่านง่ายขึ้นมาก และเมื่อ fail จะชี้ตำแหน่งปัญหาได้ชัดเจนกว่าก่อนหน้า
แยกแต่ละ behavior เป็น test ของตัวเอง และคง Arrange/Act/Assert ให้ครบทุกเคส
Step 5
Step 5: checklist เวลาเขียน AAA ใน Vitest
เวลาลองเขียน test ใหม่ ให้เช็กเร็ว ๆ ว่าแต่ละเคสมีเพียง behavior หลักเดียว, มีช่วง Arrange/Act/Assert ชัดเจน, และชื่อ test สื่อผลลัพธ์ที่คาดหวังได้ทันที ถ้าผ่านสามข้อนี้ test ส่วนใหญ่จะ maintain ได้ดีขึ้นในระยะยาว