npm install --save-dev vitest @nuxt/test-utils @vue/test-utils jsdom
vitest.config.js 설정
// vitest.config.js
import { defineConfig } from 'vitest/config'
import { fileURLToPath } from 'url'
export default defineConfig({
test: {
environment: 'jsdom',
globals: true,
},
resolve: {
alias: {
'~': fileURLToPath(new URL('./', import.meta.url)), // 루트 경로
},
},
})
nuxt.config.ts 수정
export default defineNuxtConfig({
modules: ["@nuxt/test-utils/module"],
});
테스트 실행 명령어 추가 (package.json)
"scripts": {
"test": "vitest run",
"test:watch": "vitest watch"
}
project-root/
├── utils/
│ └── filter.js
├── tests/
│ └── utils/
│ └── filter.test.js
├── nuxt.config.ts
├── vitest.config.js
├── package.json
아래는 getValue, matchesQuery, filterItems 함수를 테스트하는 코드입니다. 각 함수의 동작과 엣지 케이스를 검증합니다.
import { describe, it, expect } from "vitest";
import { getValue, matchesQuery, filterItems } from "~/utils/filter";
describe("utils/filter.js", () => {
// getValue 테스트
describe("getValue", () => {
it("단순 속성을 추출한다", () => {
const item = { title: "Hello World" };
expect(getValue(item, "title")).toBe("Hello World");
});
it("중첩 속성을 추출한다", () => {
const item = { meta: { tags: ["test"] } };
expect(getValue(item, "meta.tags")).toEqual(["test"]);
});
it("존재하지 않는 경로는 undefined를 반환한다", () => {
const item = { title: "Hello" };
expect(getValue(item, "meta.tags")).toBeUndefined();
});
it("null 또는 undefined 객체는 undefined를 반환한다", () => {
expect(getValue(null, "title")).toBeUndefined();
expect(getValue(undefined, "meta.tags")).toBeUndefined();
});
});
});