jest 는 test framework로 널리 알려져있다. 간단한 특징은 다음과 같다.
그러나 react와 typescript를 테스트하려면 추가적인 설정이 필요하다.
react component 테스트를 위해서 react에서 공식적으로 사용하라는 library로 세팅을 진행하였다.
npm install --save-dev jest
npm install --save-dev @testing-library/react
npm i -D @babel/core @babel/preset-env @babel/preset-react babel-jest @babel/preset-typescript react-test-renderer jest-environment-jsdom
// conf/babel.conf.js
module.exports = {
presets: ["@babel/preset-env", "@babel/preset-typescript", "@babel/preset-react"]
};
//__tests__/App.test.tsx
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from '../src/pages/App';
import { Provider } from 'react-redux';
import { store } from '../src/redux/store';
describe('my function or component', () => {
test('does the following', () => {});
});
describe('true is truthy and false falsy', () => {
test('true is truthy', () => {
expect(true).toBe(true);
});
test('false is falsy', () => {
expect(false).toBe(false);
});
});
describe('App', () => {
test('renders App component', () => {
render(
<Provider store={store}> // mock으로 store를 만들 수 있으나, 일단 기본 설치 테스트로 root sotre 추가
<App />
</Provider>
);
});
});
Support for the experimental syntax 'jsx' isn't currently enabled
// conf/jest.config.js
const path = require("path");
module.exports = {
transform: {
'^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { configFile: './conf/babel.conf.js' }]
},
roots: ['..'],
testEnvironment: 'jest-environment-jsdom',
};
업무를 하다 보면 생각보다 많은 사람들이 test가 필요한 이유에 대해 깊이 생각하지 않는 것 같다.
기능을 구현하면 단계적인 function, 모듈, 등 작은 단위로 나눠질 수 있다는 것을 알 수 있다.
흔하게 현금 인출 기능이라고 한다면, 사용자 인증 -> 현금 인출 액수 입력 -> 서버 통신/인증 -> 승인 -> 현금 반환 등 이런 식으로 나누면 세부 기능이 나뉜다는 의미이다.
만약 버그가 생긴다면 특정 기능의 어느 부분에서 생겼는지 알아야 하는데 그 과정을 쉽게 도와주는 것이 test가 아닌가 한다.
쉽게 접하는 단어는 unit test, end to end test로 test 종류를 나눈다.