Vue@3.4, jest@29 버전 기준으로 작성되었습니다.
Vue3에서는 vitest가 더 빠르고 다양한 테스트에 대응하기 때문에 vitest의 사용을 추천합니다. 하지만 vitest를 사용하지 못하는 특수한 경우에 Jest 29버전으로 환경 설정을 하기 위한 내용입니다.
$ yarn add -D jest @jest/global @babel/core @babel/preset-env @babel/preset-typescript babel-jest
jest
: 자바스크립트 및 TypeScript 프로젝트에서 단위 테스트를 위한 테스트 프레임워크
@jest/global
: Jest의 글로벌 API를 사용할 수 있도록 합니다.
@babel/core
: 최신 자바스크립트 문법을 구 버전 브라우저에서도 동작하게 변환해주는 Babel의 핵심 패키지
@babel/preset-env
: Babel이 특정 환경에 맞추어 자동으로 필요한 플러그인을 설정해주는 Babel 프리셋
@babel/preset-typescript
: TypeScript 코드를 Babel이 이해할 수 있는 JavaScript로 변환하기 위한 Babel 프리셋
babel-jest
: Jest와 Babel을 통합하여 Jest가 Babel을 사용해 코드를 변환할 수 있도록 합니다.
jest의 lint 설정을 활성화합니다.
{
env: {
...
"jest": true
},
...
}
module.exports = {
...
presets: [
...
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript',
],
...
};
TypeScript 컴파일러가 test파일을 처리할 수 있도록 합니다.
{
"include": [
...
"src/**/*.test.ts"
],
...
}
test script를 추가합니다.
{
...
"scripts": {
...
"test": "jest"
},
...
}
import type { Config } from 'jest';
const config: Config = {
moduleFileExtensions: ['js', 'ts', 'json', 'vue'], // 확장자가 없는 파일의 import 우선순위를 설정
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1', // '@/*' alias 설정
},
modulePathIgnorePatterns: [ // jest 파일이 포함되지 않을 경로 설정
'<rootDir>/node_modules',
'<rootDir>/build',
'<rootDir>/dist',
'<rootDir>/.yarn',
],
transform: { // 트랜스파일링 옵션 설정
'^.+\\.js': 'babel-jest',
'^.+\\.ts': 'babel-jest',
},
};
export default config;
import { describe, expect, it } from '@jest/globals';
import { doSomething } from './doSomething.ts';
describe('doSomething 단위테스트', () => {
it('단위테스트의 상세 테스트 항목', () => {
expect(doSomething('say something')).toBe('Hello World!');
});
...
});
yarn test
# or
yarn test --watch
Vue 공식문서 단위 테스트 - https://ko.vuejs.org/guide/scaling-up/testing#unit-testing