Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발의변화

Jest를 활용한 테스트 코드 작성하기 본문

카테고리 없음

Jest를 활용한 테스트 코드 작성하기

refindmySapporo 2023. 11. 7. 16:37
반응형

우테코 프리코스를 하면서 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하는 방식에 대해 이야기 하겠습니다.

반응형