2020년 2월 Jest 설정
가장 깔끔한 Jest를 설정합시다.
Jest란?
Facebook이 개발한 자바스크립트 단위 테스트 프레임워크.
Node상에서 동작하기 때문에, 간편하게 테스트를 실행할 수 있는 것이 특징.
Jest · 🃏 편안한 자바 스크립트 테스트
작업환경
설정
Jest라든지 npm install
npm install --save-dev jest babel-jest @babel/core babel-core@bridge @babel/preset-env vue-jest @vue/test-utils
각 사람의 설명
jest
Jest 본체
babel-jest
babel과 jest를 연계시키는 것
@babel/core
Babel 본체의 최신 버전
Babel은 800만 개의 JavaScript 구문을 특정 버전과 호환되는 구문으로 변환합니다.
Node에서는 최신 JavaScript 구문(import/export 등 포함)이 작동하지 않습니다.
그 때문에, Babel를 사용해 트랜스파일 해 줍니다.
babel-core@bridgevue-jest
가 @babel/core
가 아니라 babel-core
를 참조해 버린 것 같아, 이것을 해결하기 위해서 인스톨.
Babel 7.x계이지만 이름은 babel-core
Babel 본체.
@babel/preset-env
산만큼 있는 Babel의 구문 변환에 관계되는 라이브러리를 좋은 느낌에 자동적으로 사용해 주는 것.
참고 : babel-preset-env를 쉽게 만져 보았습니다. - Qiita
vue-jest
vue를 jest로 테스트 할 수있는 것
@vue/test-utils
Vue 테스트를 쉽게 작성할 수 있는 유틸리티
Babel 버전에주의
Babel 7.x에서 플러그인 접두사로 @babel/
가 붙습니다.
6.x 이전의 플러그인을 사용하면 잘 작동하지 않는 것 같습니다.
설정 파일 만들기
babel.config.js (.babelrc)
Babel의 설정 파일입니다.babel.config.js
하지만 .babelrc
하지만 좋기 때문에 소스 루트에 배치합니다. 아마 둘 다 있는 것은 좋지 않기 때문에 어느 쪽인가 한쪽으로 합시다.
babel.config.jsmodule.exports = {
presets: [
['@babel/preset-env', {modules: false}]
],
env: {
test: {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}]
]
}
}
};
jest.config.js
어떤 파일 이름을 테스트할지, 어떤 파일 이름을 어떤 모듈로 변환할지 등을 설정할 수 있습니다.
jest.config.jsmodule.exports = {
transform: {
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest',
'^.+\\.js$': '<rootDir>/node_modules/babel-jest'
},
moduleFileExtensions: [
'js',
'vue'
],
};
package.json (기존의 것을 편집)
Jest 시작 명령을 작성합니다.NODE_ENV=test
라고 하는 것으로 Node에 테스트 환경인 것을 명시하고 있습니다.
package.json{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
... ,
"test": "NODE_ENV=test jest" <-追記
},
"devDependencies": { ... },
...
}
테스트 작성
테스트 케이스를 만들어 보자.
이런 파일을 테스트 대상으로 해 보았습니다.
칼리화하고 있는 2개의 숫자를 더하는 것만의 함수입니다.
ExampleSum.jsexport default{
sum(x){
return (y){
return x + y;
}
}
}
이것을 테스트하는 스크립트는 이런 느낌.
example.test.jsimport ExampleSum from "path/to/ExampleSum";
test('test sum()', ()=>{
expect(ExampleSum.sum(1)(2)).toBe(3);
}
실행해 보자.
npm test
와 터미널에 타이핑하여 Jest를 움직여 보자.--
로 파일명을 연결하는 것으로 그 파일명과 부분 일치하는 파일만을 테스트 대상으로 줍니다.
npm test -- example.test.js
그 외의 CLI 옵션은 Jest CLI Options · Jest 에.
async / await도 테스트 할 수 있습니다.
PromiseExample.jsexport default {
sleep() {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, 500);
});
}
}
test('test async', async () => {
await PromiseExemple.sleep();
expect(true).toBe(true);
});
Vue의 프런트 엔드 테스트도 적용
가이드 | Vue Test Utils
ExampleComponent.vue<template>
</template>
<script>
export default {
name: "ExampleComponent",
methods: {
sum(x, y) {
return x + y;
}
}
}
</script>
<style scoped>
</style>
component.test.jsimport ExampleComponent from "./models/ExampleComponent";
const {mount} = require("@vue/test-utils");
test('Vue component test', () => {
const component = mount(ExampleComponent);
expect(component.isVueInstance()).toBeTruthy();
expect(component.vm.sum(1, 2)).toBe(3);
});
component.vm
가 우리의 잘 아는 Vue 컴퍼넌트 인스턴스입니다.
DOM을 조작하여 양식을 입력하거나 클릭할 수도 있습니다.
@babel/preset-env
가 놀랄만큼 편리했던 것을 알았다.
Reference
이 문제에 관하여(2020년 2월 Jest 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Denpa_Ghost/items/633b55023d47bfe6fb46
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm install --save-dev jest babel-jest @babel/core babel-core@bridge @babel/preset-env vue-jest @vue/test-utils
module.exports = {
presets: [
['@babel/preset-env', {modules: false}]
],
env: {
test: {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}]
]
}
}
};
module.exports = {
transform: {
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest',
'^.+\\.js$': '<rootDir>/node_modules/babel-jest'
},
moduleFileExtensions: [
'js',
'vue'
],
};
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
... ,
"test": "NODE_ENV=test jest" <-追記
},
"devDependencies": { ... },
...
}
export default{
sum(x){
return (y){
return x + y;
}
}
}
import ExampleSum from "path/to/ExampleSum";
test('test sum()', ()=>{
expect(ExampleSum.sum(1)(2)).toBe(3);
}
npm test -- example.test.js
export default {
sleep() {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, 500);
});
}
}
test('test async', async () => {
await PromiseExemple.sleep();
expect(true).toBe(true);
});
<template>
</template>
<script>
export default {
name: "ExampleComponent",
methods: {
sum(x, y) {
return x + y;
}
}
}
</script>
<style scoped>
</style>
import ExampleComponent from "./models/ExampleComponent";
const {mount} = require("@vue/test-utils");
test('Vue component test', () => {
const component = mount(ExampleComponent);
expect(component.isVueInstance()).toBeTruthy();
expect(component.vm.sum(1, 2)).toBe(3);
});
Reference
이 문제에 관하여(2020년 2월 Jest 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Denpa_Ghost/items/633b55023d47bfe6fb46텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)