Dark mode
In-Source Testing
Vitest มีวิธีการรันเทสต์ภายในโค้ดต้นฉบับของคุณควบคู่ไปกับการใช้งานจริง คล้ายกับ module tests ของ Rust
วิธีนี้ทำให้เทสต์สามารถใช้ closure เดียวกันกับการใช้งานจริง และสามารถทดสอบสถานะส่วนตัวได้โดยไม่ต้องเปิดเผย (export) นอกจากนี้ยังช่วยให้วงจรการพัฒนาและรับผลตอบกลับรวดเร็วขึ้น
WARNING
คู่มือนี้อธิบายวิธีเขียนเทสต์ภายในโค้ดต้นฉบับของคุณ หากคุณต้องการเขียนเทสต์ในไฟล์เทสต์แยกต่างหาก โปรดดูที่คู่มือ "Writing Tests"
การตั้งค่า
เพื่อเริ่มต้น ให้วางบล็อก if (import.meta.vitest)
ไว้ที่ท้ายไฟล์ต้นฉบับของคุณและเขียนเทสต์บางส่วนไว้ข้างใน ตัวอย่างเช่น:
ts
// การใช้งานจริง
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// เทสต์ในโค้ดต้นฉบับ
if (import.meta.vitest) {
const { it, expect } = import.meta.vitest;
it("add", () => {
expect(add()).toBe(0);
expect(add(1)).toBe(1);
expect(add(1, 2, 3)).toBe(6);
});
}
อัปเดตการตั้งค่า includeSource
สำหรับ Vitest เพื่อดึงไฟล์ภายใต้ src/
:
ts
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
includeSource: ["src/**/*.{js,ts}"],
},
});
จากนั้นคุณสามารถเริ่มทำการทดสอบได้!
bash
$ npx vitest
การ Build สำหรับ Production
สำหรับการ build ในโหมด production คุณจำเป็นต้องตั้งค่าตัวเลือก define
ในไฟล์ config ของคุณ เพื่อให้ bundler ทำการกำจัดโค้ดที่ไม่ใช้ ตัวอย่างเช่น ใน Vite
ts
/// <reference types="vitest/config" />
import { defineConfig } from "vite";
export default defineConfig({
test: {
includeSource: ["src/**/*.{js,ts}"],
},
define: {
"import.meta.vitest": "undefined",
},
});
Bundlers อื่นๆ
TypeScript
เพื่อให้ TypeScript รองรับ import.meta.vitest
ให้เพิ่ม vitest/importMeta
ลงใน tsconfig.json
ของคุณ:
json
{
"compilerOptions": {
"types": ["vitest/importMeta"]
}
}
ดูตัวอย่างเต็มได้ที่ examples/in-source-test
หมายเหตุ
คุณลักษณะนี้จะเป็นประโยชน์สำหรับ:
- การทดสอบหน่วยสำหรับฟังก์ชันหรือยูทิลิตี้ขนาดเล็ก
- การทำต้นแบบ (Prototyping)
- การตรวจสอบแบบ Inline
แนะนำให้ใช้ไฟล์ทดสอบแยกต่างหากสำหรับการทดสอบที่ซับซ้อนมากขึ้น เช่น คอมโพเนนต์หรือการทดสอบ E2E