개발의변화
Jest를 활용한 테스트 코드 작성하기 본문
우테코 프리코스를 하면서 Jest를 처음 사용하기 시작했다.
처음엔 테스트를 돌리는데 왜 틀린 지에 대해 감이 안 잡혀 하루종일 테스트 코드 단 몇 문장을 뚫어지게 쳐다보기마 한 것 같다.
Jest란?
페이스북에서 만들어 지금은 vitest 다음으로 많이 사용하고 있는 테스트 라이브러리이다.
npm i -D jest
로 설치해주고
npm test 테스트 국룰 예약어 설정을 위해
"scripts":{
...
"test": "jest"
}
package.json에 추가하자
테스트 파일이나 폴더는
test.js로 끝내거나 __test__ 디렉터리 만들면 그 안에 파일은 다 테스트로 인식한다.
또한 하나의 테스트만 확인하고 싶으면 npm test <파일명> 하면된다.
Matchers
내가 짠 테스트의 실행값과 맞는 값을 테스트하기 위해 Matchers를 활용해야 한다.
- toBe, toEqual
> toBe(Object) : 예상한 Object와 toBe 안의 Object이 같을 때
toEqual(data): object에 있는 data가 각각 맞을 때
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
test('object assignment', () => {
const data = {one: 1};
data\['two'\] = 2;
expect(data).toEqual({one: 1, two: 2});
});
)](https://velog.velcdn.com/images/refindmysapporo/post/0128e6a9-ed99-4815-8629-2e957a77144d/image.png))
Jest 공식문서 형님의 말처럼 object를 확인, object 안에 있는 값을 확인하는 것으로 차이가 있다고 보면 된다.
- toBeNull, toBeundefined, toBeDefined,toBeTruthy, toBeFalse : Javascript null, undefined, true, false 에 대해 판별할 수 있는 matchers다.
test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});
test('zero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});
- toBeGreaterThan: >,toBeLessThan: < 숫자형 파악할 때 쓰는 matchers이다.
expect(number).toBeGreaterThanOrEqual(1);
expect(number).toBeLessThanOrEqual(45);
OrEqual 붙여서 써도 되고 예시처럼 이렇게 쓰면된다.
- toMatch: String에서 활용하는 matchers
test('there is no I in team', () => {
expect('team').not.toMatch(/I/);
});
test('but there is a "stop" in Christoph', () => {
expect('Christoph').toMatch(/stop/);
});
- toContain: 배열이나 객체에 value값이 있는지 확인하는 matchers
const shoppingList = [ 'diapers', 'kleenex', 'trash bags', 'paper towels', 'milk', ];
test('the shopping list has milk on it', () => {
expect(shoppingList).toContain('milk');
expect(new Set(shoppingList)).toContain('milk');
});
**중요**
- toThrow: 예외처리 확인할 때 사용하는데 matchers로 개인적으로 좀 중요하다고 생각한다.
```js
expect(()=>{
new Lotto(\[1,2,3,4,5,6\],46)
}).toThrow("\[ERROR\]")
toThrow안에 문자열을 포함하는 지를 테스트한다.
Setup and Teardown
beforeEach: 테스트가 수행되기 전에
afterEach: 테스트 이후 수행하고 싶은 것이 있다면
beforeAll: 테스트 코드가 여러 개가 있는 경우 모든 테스트가 실행되기전에 1회 실행, beforeEach는 테스트 코드마다 실행전에 수행되었다면 beforeAll은 모든 테스트가 실행되기전 1회
afterAll: 모든 테스트가 끝난 다음에 실행
다음은 Mocking하는 방식에 대해 이야기 하겠습니다.