matchers

일치 도구라 한다. 주어진 값과 기대하는 값을 비교하고 테스트의 통과와 실패를 판별하는 데 사용된다.

expect

expect는 matcher는 아니다. 단지 matcher가 작동을 하기 위해 필요한 expectation object라는 것을 리턴해준다. expect는 우리가 테스트하고 싶은 대상의 값을 matcher에게 제공해주는 역할을 하고, 그 값을 matcher가 받아서 matcher의 인자로 들어온 실제 값과 비교하며 테스트가 진행된다.

.toBe(value)

expect가 비교하고 싶은 값을 나타낸다면 toBe는 실제 값을 이야기한다. 그 중에서도 원시 데이터를 비교할 때 사용한다.

const userA = {
  name: 'HEROPY',
  age: 85
}

const userB = {
  name: 'Neo',
  age: 22
}
test('data must be equal', () => {
  expect(userA.age).toBe(85)
  expect(userA).toBe({
    name: 'HEROPY',
    age: 85
  }) // If it should pass with deep equality, replace "toBe" with "toStrictEqual"
})

두 번째 테스트가 실패하는 것을 알 수 있다. 이를 통해서 알 수 있듯, 참조형 데이터는 toBe()로 비교할 수 없다. 아마도 이는 일치 연산자로 비교하는 것과 비슷한 원리로, 참조형 데이터를 비교하는 중 참조값이 서로 달라서 발생하는 문제인 듯 하다.

.toEqual(value)

따라서 참조형 데이터의 값을 테스트할 때는 다른 메서드를 사용하여야 하는데, 이가 바로 .toEqual이다. 객체 데이터와 배열 데이터를 비교할 때는 이 메서드를 사용한다.

test('data must be equal', () => {
  expect(userA.age).toBe(85)
  expect(userA).**toEqual**({
    name: 'HEROPY',
    age: 85
  })
})

.not

.not은 expect()에 있는 값이 toBe()에 있는 값과 다르다는 것을 판별하기 위해 사용하는 브릿지이다.

test('data must be not equal', () => {
  expect(userB.name).toBe('HEROPY')
  expect(userB).not.toBe(userA)
})