[TDD/Jest]2.Jest 간단하게 이해해보기

김형주·2021년 8월 18일
0

Jest-Framwork

목록 보기
2/3

JEST


Jest는 페이스북에서 만들어서 React와 더불어 많은 자바스크립트 개발자들로 부터 좋은 반응을 얻고 있는 테스팅 라이브러리다. 출시 초기에는 프론트엔드에서 주로 쓰였지만 최근에는 백엔드에서도 기존의 자바스크립트 테스팅 라이브러리를 대체하고 있다.

Jest : 올인원 테스팅 프레임워크

Jest는 단순한 테스팅 라이브러ㅣ라기보다 '테스팅 프레임워크'라고 불릴 정도로 기존 JS 테스팅 라이브러리들과는 다르다. Jest 이전에는 자바스크립트 코드를 테스트하라면 여러가지 테스팅 라이브러리를 조합해서 사용하곤 했다. 예를 들어, (코드스테이츠 코드 테스트로 사용했던 Mocha, Chai, Expect)MochaJasmin을 Test Run Tool로 사용하고 Chai나 Expect와 같은 Test Matcher를 사용했다. 또 Sinon이나 Testdouble과 같은 다른 Test Mock과 같은 라이브러리도 함께 사용해야만 했다.

참고 링크

이 패키지들은 유사하면서 다른 API를 가지고 있어서 프로젝트를 진행하며 테스팅 툴로 사용하면서 혼돈이 많아졌다. 하지만 Jest는 라이브러리 하나만 설치하면 Test Run/Match/Mock 프레임워크까지 제공하기 때문에 테스팅 프레임워크로 많이 사용되고 있다. (한 주에 천만명 가까운 개발자들이 채택하고 있다..)

Jest 한번 사용해보기

지난번에는 간단하게 Jest.js에 있는 튜토리얼을 이용해 간단한 예제 테스트 코드만 짜봤다. 이번에는 실제로 테스트를 실행하면 나오는 결과를 통해서 실제로 사용 환경을 살펴보도록 하겠다.

테스트 코드

test.js

test("1 is 1", () => {
	expect(1).toBe(1);
});

다음과 같은 파일 작성하고 npm test를 실행해보면 다음과 같은 결과물을 터미널을 통해 확인할 수 있다.

$ npm test // 우선 스크립트를 test에서 jest로 바꿔줘야한다.

> my-jest@1.0.0 test /jesttest
> jest

 PASS  ./test.js
  ✓ 1 is 1 (3ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.868s, estimated 1s
Ran all test suites.

다음과 같이 통과한 시간과 통과하게된 테스트를 설명해주는 텍스트가 출력되는데, 실제 위에 작성한 코드를 간단하게 설명해보면 다음과 같다.

test("test description", () => { // callback
  expect("test object").toBe("toBeValue");
});

test의 첫번째 변수로는 테스트의 내용을 적고, 값이 나오길 기대하는 값의 변수값이 expect에 들어가게 되고 toBe의 결과물에 기대값이 들어가게 된다. toBe()함수는 Test Matcher의 일종인데 이 부분의 설명은 나중으로 미루겠다. 테스트를 하고 기대되는 결과값이랑 Match시키는 함수라고 볼 수 있다. 따라서 전달인자로 결과 예상값이 들어가게된다. (단, toBe Matcher의 경우에는 Primitive값을 비교할 때만 사용한다. ( ex string, number,)

npm test 혹은 npm jest를 실행시키면 프로젝트 내부의 모든 테스트 파일을 찾아서 실행시켜준다. 기본적으로 test.js나 __test__ 디렉토리를 추적해 내부의 파일을 전부 test 파일로 인식한다. 만약 특정 테스트만 실행하고 싶은 경우에는 npm test뒤에 특정 파일명 혹은 경로를 입력해주면 된다.

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!

0개의 댓글