devlog

[Jest] Javascript Test 코드 작성하기 본문

JavaScript

[Jest] Javascript Test 코드 작성하기

bellaah 2019. 11. 29. 12:04

1. jest란?

All-in-one 테스팅 라이브러리이다. Jest 이전에는 자바스크립트 코드를 테스트하라면 여러가지 테스팅 라이브러리를 조합해서 사용하곤 했었다. 하지만 Jest는 라이브러리 하나만 설치하면, Test Runner와 Test Mathcher 그리고 Test Mock 프레임워크까지 제공해주기 때문에 상당히 편리한 것 같다.

2. jest 사용하기

  • jest 라이브러리 설치하기

  • test script 수정하기: package.json의 test 부분을 아래와 같이 변경한다. test 뒤에 주고 싶은 option을 추가할 수 있다.

    npm i -D jest
  • filename.test.js와 같은 이름의 file을 생성하고 test코드를 작성한다.

  • 그 후 npm test를 하면 test가 실행된다.

3. test 작성하기

  • test / it: 테스트 하나를 작성할 때 사용하는 키워드이다.(하나의 테스트 단위) 아래는 예시이다.

      test('socket connect test', (done) => {
          socket.on('connect', () => {
            done();
          });
      });
  • describe: describe 라는 키워드를 사용하여 여러 테스트 케이스를 묶을 수 있다.

      describe('socket.io test', () => {
        beforeAll(() => {
          ...
        });
    
        afterAll(() => {
         ...
        });
    
        test('socket connect test', (done) => {
          ...
        });
    
        test('[EMIT] \'enter_room\' event test', (done) => {
          ...
        });
      });

4. jest 더 알아보기

  • 아래의 Methods들은 모두 scope가 있다. 전역에 쓰면 모든 테스트에 적용되고 하나의 describe안에 넣으면 그 describe안에 있는 test에만 적용된다. 예시는 위의 코드와 같다.
  • afterAll(fn, timeout): 모든 테스트가 끝나고 한번 실행된다.
  • afterEach(fn, timeout): 하나의 테스트가 끝날 때 마다 매번 실행된다.
  • beforeAll(fn, timeout): 모든 테스트가 시작하기 전에 한번 실행된다.
  • beforeEach(fn, timeout): 하나의 테스트가 시작하기 전에 매번 실행된다.

5. 자주 사용되는 Matcher

  • toEqual(): 두 값이 같은지 비교하는 Matcher이다. object가 정확히 같은지 판단할 수 있다. javascript에서 object.is 와 같다.

      expect(response).toEqual(value);
  • toBeTruthy(), toBeFalsy(): 값이 false인지 true인지 확인하는 Matcher이다.

      expect(response).toBeTruthy(); // response가 true인지 확인
  • toHaveLength(): object의 길이를 확인하는 Matcher이다.

      expect(response).toHaveLength(3);
  • toContain(): array에 포함하는지 확인하는 Matcher이다.

      expect(response).toContain('hello');
  • toThrow(): 에러를 throw()하는지 확인하는 Matcher이다.

      expect(() => {
          drinkFlavor('octopus');
      }).toThrow();
Comments