Dark mode
ทำไมต้อง Vitest
ความจำเป็นที่ต้องมี Test Runner สำหรับ Vite โดยเฉพาะ
Vite เป็นเครื่องมือพัฒนาที่รองรับฟีเจอร์ของเว็บสมัยใหม่อย่างครบวงจร เช่น
glob imports,
SSR primitives และการผสานรวมกับ
ปลั๊กอินจำนวนมาก ซึ่งทำให้ระบบนิเวศของ Vite มีความหลากหลายและทรงพลังมากยิ่งขึ้น
ในขณะที่ Vite ได้รับความนิยมในการพัฒนาและ build โปรเจกต์ แต่ในเรื่องของการทดสอบหน่วย (Unit Testing) กลับยังไม่มีทางเลือกที่ลงตัวโดยเฉพาะ ในอดีต เรามักจะใช้เครื่องมืออย่าง Jest ซึ่งถูกออกแบบมาในบริบทที่แตกต่างจาก Vite ทำให้เกิดการทำงานที่ซ้ำซ้อนระหว่าง Jest และ Vite และบังคับให้ผู้ใช้ต้องจัดการ pipeline สองชุดแยกกัน
วิธีแก้ไขปัญหาด้วย Vitest
Vitest ถูกออกแบบมาเพื่อตอบโจทย์ปัญหานี้โดยตรง โดยใช้
Vite Dev Server เพื่อแปลงไฟล์ระหว่างการทดสอบ ซึ่งช่วยให้:
- ไม่ต้องจัดการระบบแปลงไฟล์ซ้ำซ้อน
- ใช้ configuration เดียวกันกับโปรเจกต์ของคุณ (
vite.config.js
) - แชร์ไปป์ไลน์การแปลงเดียวกันระหว่าง development, build และ testing
- ขยายความสามารถได้ด้วย plugin API เดียวกันกับ Vite
Vitest จึงเป็น Test Runner ยุคใหม่ที่ถูกสร้างมาพร้อมกับ Vite ตั้งแต่แรกเริ่ม
ประสิทธิภาพและความคล้ายคลึงกับ Jest
ดูข้อมูลเพิ่มเติมเกี่ยวกับ
ความเข้ากันได้กับ Jest และ
การย้ายจาก Jest มาใช้ Vitest
เนื่องจาก Jest เป็นเครื่องมือทดสอบที่ได้รับความนิยมอย่างกว้างขวาง Vitest จึงออกแบบให้มี API ที่เข้ากันได้ เพื่อให้สามารถแทนที่ Jest ได้ง่ายในหลายโปรเจกต์ โดยยังคงฟีเจอร์สำคัญไว้ครบ เช่น:
- การ mock
- Snapshots
- Coverage Reports
นอกจากนี้ Vitest ยังมุ่งเน้นที่ ประสิทธิภาพ โดยใช้ Worker threads เพื่อให้การรันทดสอบเป็นแบบขนาน ทำให้รวดเร็วขึ้นมาก — บางกรณีพบว่าเร็วขึ้นถึง 10 เท่า
โหมด Watch ทำงานโดยค่าเริ่มต้น ซึ่งสอดคล้องกับแนวทางของ Vite ที่ให้ความสำคัญกับประสบการณ์การพัฒนา (DX)
แม้จะมีฟีเจอร์มากมาย Vitest ก็ยังคงมีขนาดเล็ก เพราะเลือกการพึ่งพาอย่างระมัดระวัง หรือรวมส่วนที่จำเป็นไว้ภายในเอง
สรุป: Vitest คืออะไร?
Vitest คือ Test Runner ที่ถูกสร้างมาเพื่อ Vite โดยเฉพาะ แต่ก็สามารถใช้ได้ดีแม้กระทั่งในโปรเจกต์ที่ไม่ได้ใช้ Vite
ศึกษาเพิ่มเติมเกี่ยวกับ
เหตุผลที่ควรใช้ Vitest และ
การเริ่มต้นใช้งาน
จุดเด่นหลัก:
- รองรับ
Vite plugins และ
config เดียวกัน
- ใช้
HMR และ
watcher แบบ real-time
- เร็วมากด้วยการทำงานแบบ
parallel
เข้ากันได้กับ Jest API
ขนาดเล็ก และ
ปรับแต่งง่าย