안녕하세요! 새콤하고달콤입니다.
오늘은 프론트엔드 테스팅 전략 및 구현에 대한 이야기를 해보려고 합니다.
테스트 코드 : 애플리케이션이 요구 사항에 맞게 동작하는지를 검증하는 행위
자동화 테스트의 중요성 : 대부분의 테스트가 반복적인 행위, 위의 간단한 예제에서도 "해당 항목을 클릭" 하고 결과를 "확인" 하는 과정이 계속해서 반복되는 것을 볼 수 있습니다. 이런 반복된 작업을 수동으로 진행하게 되면 애플리케이션의 복잡도가 증가할수록 테스트 비용만 증가하게 됩니다.
좋은 테스트가 뭔지 알아야 합니다.
1. 실행 속도가 빨라야 합니다.
2. 내부 구현 변경 시 깨지지 않아야 합니다.
3. 버그를 검출할 수 있어야 합니다.
4. 테스트의 결과가 안정적이어야 합니다.
5. 의도가 명확하게 들어나야 합니다.
일단 해보자는 생각으로 현재 진행중인 프로젝트에서 도입을 하였습니다.
jest를 이용해서 구현하였습니다.
div 태그를 생성한 후에
header에 rendering 시킨 후 innerHTML의 스냅샷과 비교합니다.
기존의 스냅샷이 존재하는 경우, 같은지 아닌지 비교하고 같으면 통과 아니면 실패하게 됩니다.
import React from 'react';
import { render } from 'react-dom';
import Header from '../components/header';
it('Header Component - snapshot', () => {
const el = document.createElement('div');
render(<Header />, el);
expect(el.innerHTML).toMatchSnapshot();
});
- jest.config.js 파일을 통해서 test에 match할 수 있도록 파일 형식을 지정해주었습니다.
- ts, tsx를 테스트할 수 있도록 transform 설정을 진행하였습니다.
- svg나 png 파일 또한 사용할 수 있도록 moduleNameMapper 속성을 지정하였습니다.
module.exports = {
roots: ['<rootDir>/src'],
testMatch: [
'**/__tests__/**/*.+(ts|tsx|js)',
'**/?(*.)+(spec|test).+(ts|tsx|js)',
],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
collectCoverageFrom: ['src/**/*.{js,jsx}'],
moduleNameMapper: {
'^.+\\.(svg|png|ico)$': 'ts-jest',
},
};
'토이프로젝트 > programmerGround' 카테고리의 다른 글
programmerGround 개발 - 임시 데이터를 활용한 컴포넌트 구축(2021.02.28) (0) | 2021.02.28 |
---|---|
programmerGround 다크모드 구현(2021.02.11 ~ 2021.02.12) (0) | 2021.02.12 |
programmerGround 검색창 만들기(2020.02.07) (0) | 2021.02.08 |
header 컴포넌트 제작(2020.02.06) (0) | 2021.02.06 |
메인페이지 UI 구상(2020.01.28) (0) | 2021.01.28 |