[TDD] jest의 Matchers 정리

김지원·2021년 8월 29일

tdd

목록 보기
3/3
post-thumbnail

1. 개요

Jest는 보통 함수의 반환값을 인자로 받는 expect 함수를 제공한다.
그리고 그 인자를 토대로 결과값을 expectation 객체로 반환해준다.

이 과정에서 비교하려는 값과 실제 값을 비교하는 메소드가 필요하게 된다. 그것들을 Matchers라고 부른다.

2. matchers

표로 정리한 matchers

함수명설명
.toEqual객체의 내용이 같은지 확인
.toStrictEqual엄격한 toEqual로 undefined 허용 X
.toBeNull오직 Null과 같은지 확인
.toBeUndefined오직 undefined와 같은지 확인
.toBeDefinedundefined가 아닌지 확인
.toBeTruthytrue값인지 확인
.toBeFalsyFalse값인지 확인
.toMatch정규 표현식을 이용해 문자열이 포함되어 있는지 확인
.toContain배열이나 반복하는 객체가 특정 요소를 포함하는지 확인
.toThrow함수가 호출될 때 에러를 던지는지 확인
.toBeCalled실행한 함수에 기대한 함수가 호출되는지 확인
.toBeCalledWith기대한 함수의 결과값에 포함이 되는지 확인

3. toBe를 사용하지 않는 이유

Jest의 공식 페이지를 가면 toBe 대신 toEqual을 사용하는 것을 권장한다.

test.js(테스트하려는 코드)

const test {
	person: (firstName, lastName) => ({firstName, lastName})
}

module.exports = test;

jest.spec.js(테스트)

const make = require("../test.js");

const me = make.person("jiwon","kim");

describe("toBe와 toEqual 차이", () => {
  
  test("toBe", () => {
      expect(me).toBe({"jiwon","kim"});
  });
  //실패
  
  test("toEqual", () => {
      expect(me).toEqual({"jiwon","kim"});
  });
  //성공
}

사실 toBe와 toEqual 둘 다 원시적인 타입(string, number, boolean, null)에서는 같은 역할을 한다.
하지만 객체에서는 달라진다.

toBe는 그 객체가 어느 메모리에 위치하는지도 따져서 확인한다. 그래서 위의 예시에서도 결과가 실패가 뜨게 된다.

toEqual은 그 객체의 값만 보고 비교하기 때문에 위 예시에서는 성공이 뜬다.

javascript를 예시로 비교하면 ==은 toBe, ===은 toEqual로 비교할 수 있다.


참고

https://jestjs.io/docs/using-matchers

profile
backend-developer

0개의 댓글