https://www.youtube.com/watch?v=TTLHd3IyErM - 드림코딩 Front-end 로드맵 영상
Testing
3. Test Pyramid
🔎 마틴 파울러 Test Pyramid
각 단계는 인수 테스트(UI) - 통합 테스트(Integration) - 단위 테스트(Unit) 로 구성되는데, 밑으로 내려 올 수록 더 많은 테스트 코드를 작성하라는 뜻을 가지고 있다.
단위 테스트 (Unit Test)
추상적이지만 가장 작은 단위로 기능을 나누어 그 기능을 테스트하는 기법. 단위의 크기가 작을수록 복잡성이 낮아져서 테스트하기가 더 용이해진다. 따라서, 테스트 대상 단위의 크기를 작게 설정해서 단위 테스트를 최대한 간단하고 디버깅하기 쉽게 작성해야 한다.
통합 테스트 (Integeration Test)
개발자가 변경할 수 없는 부분(ex. 외부 라이브러리)까지 묶어서 검증할 때 사용. DB에 접근하거나, 다양한 환경이 제대로 작동하는지 확인하는데 필요한 모든 작업을 수행할 수 있다.
인수 테스트 (UI Test)
시나리오에 맞춰 수행하는 테스트. 개발자가 직접 시나리오를 제작할 수도 있지만, 다른 의사소통 집단으로부터 시나리오를 받아 개발한다는 의미를 가지고 있다.
인수 테스트는 SW 인수를 목적으로 하는 테스트라고도 하는데 SW 인수하기 전에 명세한 요구사항대로 잘 작동하는지 검증하는 과정이기 때문. SW의 내부 구조나 구현 방법을 고려하기 보단 실제 사용자 관점에서 테스트하는 경우가 많다.
.
🔎 Jest
Jest는 페이스북에서 만든 테스팅 라이브러리로 초기에는 프론트엔드에서 주로 쓰였지만 최근에는 백엔드에서도 기존 자바스크립트 테스팅 라이브러리를 대체하고 있다.
Jest 이전에는 자바스크립트 코드를 테스트 하려면 여러가지 테스팅 라이브러리를 조합해서 사용하였다.(Test Runner, Test Matcher 등) 하지만 Jest는 라이브러리 하나만 설치하면, Test Runner, Test Matcher, Test Mock 프레임워크까지 제공해주기 때문에 상당히 편리하다.
Jest 설치
$ npm i -D jest
test 스크립트 추가 및 테스트코드 작성
// package.json
"scripts": {
"test": "jest"
},
// 테스트할함수파일명.test.js
describe('계산 테스트', () => {
const a = 1, b = 2;
test('a + b는 3이다.', () => {
expect(a + b).toEqual(3);
});
});
describe 는 테스트 그룹을 묶어주는 열할을 하고, 그 안의 콜백함수 내에 테스트에 쓰일 가짜 변수, 객체들을 선언하여 일회용으로 사용할 수 있다. toXxx 부분에서 사용되는 함수를 흔히 Test Mathcher라고 하는데, 위에 사용된 toEqual() 함수는 값을 비교할 때 사용한다. 즉, expect(a+b).toEqual(3) 은 a+b의 기대값이 3과 같으면 true를 의미한다.
npm test를 실행하면 프로젝트 내에 모든 테스트 파일을 찾아 테스트를 실행해준다. Jest는 기본적으로 test.js로 끝나거나 __test__ 디렉터리 안에 파일들은 모두 테스트 파일로 인식한다. 만약 특정 테스트 파일만 실행하고 싶은 경우에는 npm test <파일명 or 경로>로 입력한다.
.
참조
https://velog.io/@alswn9938/테스트-피라미드
https://inpa.tistory.com/entry/JEST-%F0%9F%93%9A-jest-문법-정리