[Jest] 자바스크립트 테스팅하기

GonnabeAlright·2021년 12월 6일
0
post-thumbnail

자바스크립트 테스팅 도구

자바스크립트로 작성된 프로젝트에 테스트 자동화를 사용할 때 사용할 수 있는 도구는 다음과 같습니다.

Karma, Jasmine, Jest, Chai, Mocha

Jest는 페이스북 팀에서 Jasmine 기반으로 만든 테스팅 프레임워크입니다. CRA로 만든 프로젝트에는 자동으로 적용이 되어있습니다.

sum.js

function sum(a, b) {
  return a + b; 	 
}
module.exports = sum;

sum.test.js

const sum = require('./sum');

test('1 + 2 = 3', () => {
  expect(sum(1, 2)).toBe(3);
});

여기서 사용한 test라는 함수는 새로운 테스트 케이스를 만드는 함수입니다. 그리고 expect특정 값이 '~일 것이다'라고 사전에 정의를 하고 통과를 하면 테스트를 성공시키고 통과를 하지 않으면 테스트를 실패시킵니다. toBematchers라고 부르는 함수인데요, 특정 값이 어떤 조건을 만족하는지, 또는 어떤 함수가 실행됐는지, 에러가 났는지 등을 확인할 수 있게 해줍니다. 여기서 toBe는 특정 값이 우리가 정한 값과 일치하는지 확인을 해줍니다.

jest 셋팅하기

1. 모듈을 추가해줍니다.

yarn add jest @type/jest --dev

2. package.json에 다음과 같이 추가해줍니다.

{
 "scripts": {
   "test": "jest"
  }
}

위에서 새로운 테스트 케이스를 만들 때, test라는 키워드를 사용했지만 이 키워드 말고 it이라는 키워드를 사용할 수도 있습니다. 작동방식은 완전히 똑같습니다. it을 사용하게 되면 테스트 케이스 설명을 영어 또는 한국어로 작성할 수 있습니다.

const sum = require('./sum');

it('calculates 1 + 2', () => {
  expect(sum(1, 2)).toBe(3);
});

describe 를 사용해서 여러 테스트 케이스를 묶기

테스트 케이스를 작성할 때 describe 라는 키워드를 사용하면 여러 테스트 케이스를 묶을 수 있습니다. 먼저 sum.js에 배열의 총합을 구해주는 sumOf를 구현합니다.

function sum(a, b) {
  return a + b;  
}
function sumOf(numbers) {
  let result = 0;
  numbers.forEach(n => {
    result += n;
  });
  return result;   	
}
exports.sum = sum;
exports.sumOf = sumOf;

현재 여러 함수를 내보내고 있기 때문에 테스트 케이스가 망가졌을 것입니다. 다음과 같이 테스트 코드를 수정하세요.

const { sum, sumOf } = require('./sum');
describe('sum', () => {
  it ('calculates 1 + 2', () => {
    expect(sum(1, 2)).toBe(3);
  });
  it ('calculates all numbers', () => {
    const array = [1, 2, 3, 4, 5];
    expect(sumOf(array)).toBe(15);
  });  
});

이렇게 describe로 감싸주고 나면, 여러 테스트 케이스가 sum이라는 이름으로 분류됩니다.

리팩토링

테스트 코드를 작성 했을 때 얻을 수 있는 이점은 리팩토링 이후 코드가 제대로 작동하고 있는 것을 검증하기 매우 간편하다는 것입니다. 한번 sumOf 함수를 다음과 같이 리팩토링 해보세요.

function sum(a, b) {
  return a + b;
}

function sumOf(numbers) {
  return numbers.reduce((acc, current) => acc + current, 0);  
}

exports.sum = sum;
exports.sumOf = sumOf;

배열 내장함수 reduce를 사용해서 배열의 총합을 구해주었습니다. 만약에 여기서 실수를 했었더라면 테스트 케이스가 실패하여 바로 알 수 있습니다.

Jest 테스팅 명령어

  • toBe(a)

    예상한 값이 매개변수와 같은 값일 것인지 확인합니다.

  • toEqual(obj)

    매개변수(객체)와 같은 값일 것이라 예상합니다. 객체가 가진 값의 비교가 가능합니다.

  • not.toBe(a)

    뒤의 결과를 부정하는 값과 비교합니다.

  • toBeNull()

    예상한 값이 null인지 확인합니다.

  • toBeUndefined()

    예상한 값이 undefined인지 확인합니다.

  • toBeDefined()

    예상한 값이 undefined가 아닌지 확인합니다.

  • toBeTruthy()

    예상한 값이 truthy한 값인지 확인합니다.

  • toBeFalsy()

    예상한 값이 falsy한 값인지 확인합니다.

  • toBeGreaterThan(number)

    number보다 큰 값인지 확인합니다.

  • toBeGeaterThanOrEqual(number)

    number보다 크거나 같은 값인지 확인합니다.

  • toBeLessThan(number)

    number보다 작은 값인지 확인합니다.

  • toBeLessThanOrEqual(number)

    number보다 작거나 같은 값인지 확인합니다.

  • toBeCloseTo(float)

    float인 매개변수와 같은 값인지 확인합니다. 부동소수점 에러를 해결하기 위해 고안되었습니다.

  • toMathch(string)

    string을 포함하는 문자열인지 확인합니다.

  • toContain('item')

    item을 포함하는 배열(iterator)인지 확인합니다.

  • toThrow()

    예외를 발생시키는지 확인합니다.

0개의 댓글