Matcher란?

Jest는 다른 방법으로 값을 테스트 하도록 natcher라는 것을 사용한다.

matcher란 ‘이거 맞아?’ 라고 물어보는 메서드라고 보면 된다. 기대한 값이 실제 반환된 값과 일치하는 지를 확인하는 작업을 일컫는다.

toEqual()

객체가 일치한 지 검증.

왠만한 일치를 비교하려 할 때 이 메소드를 사용하자.

const { getUser } = require('user'); // 테스트할 함수를 가져온다. 

test("return a user object", () => {
  // getUser(1)의 리턴 결과값이 { 객체 } 값이 같은 경우 true
  expect(getUser(1)).toEqual({
    id: 1,
    email: `[email protected]`,
  });
});

toBe()

정말 단순한 값 비교. (문자열이나, 숫자형에 사용하자)

Don't use .toBe with floating-point numbers. For example, due to rounding, in JavaScript 0.2 + 0.1 is not strictly equal to 0.3.

소수점일때는 사용하지 말자.(소숫점의 경우는 .toBeCloseTo 를 사용하자)

또한 toBe는 obj가 같은 객체를 가리키고 있는지 확인한다.

test('toBe는 obj가 같은 객체를 가리키고 있는지 확인한다', () => {
    const obj = {};
    expect(obj).toBe(obj); // true
});

 

test('객체의 내용이 같더라도 서로 다른 메모리에 있는 객체이기 때문에 toBe를 쓰면 false가 나온다.', () => {
    expect({ name: 'John' }).toBe({ name: 'John' }); // false
});

 

test('대신에 객체의 내용이 같은지를 확인하려면 toEqual을 써야 한다', () => {
    const obj = {};
    expect({ name: 'John' }).toEqual({ name: 'John' }); // true
});

따라서, 왠만하면 toEqual를 쓰자.