Jest - Matchers

Doyoon Lee·2022년 1월 18일
0

Basic Matchers

.toBe()

  • .toBe()Object.is() 를 사용해 정확히 일치하는지를 판단한다.

.toEqual()

  • object 의 value 확인이 필요할 때에는 toEqueal을 사용하자.
const can1 = {
  flavor: 'grapefruit',
  ounces: 12,
};
const can2 = {
  flavor: 'grapefruit',
  ounces: 12,
};

describe('the cans on my desk', () => {
  test('have all the same properties', () => {
    expect(can1).toEqual(can2);
  });
  test('are not the exact same can', () => {
    expect(can1).not.toBe(can2);
  });
});

.toMatch()

  • 내부에 regex 또는 string을 넣어서 일치하는지 판단한다.

.toContain()

  • Array 나 iterable 을 대상으로 내부에 해당 값이 존재하는지 테스트
test('Shopping list should have milk', ()=> {
	expect(list).toContain('milk');
	expect(new Set(list)).toContain('milk');
});

숫자에 사용하는 다양한 matchers

.toBeGreaterThan()
.toBeGreaterThanOrEqual()
.toBeLessThan()
.toBeLessThanOrEqual()
.toBeCloseTo()

자주쓸것 같은 Matcher

.toBeTruthy()

  • if 문 내부에서 쓰이는 함수같은 경우에 그 값을 테스트하는 용으로 사용하면 좋음
drinkSome();
if (checkThirsty()) {
	drinkMore();
}

test('drink', ()=> {
	drinkSome();
	expect(checkThirsty()).toBeTruthy();
});

.toBeFalsy()

  • 같은 맥락 if (!value) 한 값들을 테스트하기 좋음

.resolves()

  • promise 가 resolve 되었을 때의 결과값을 테스트
test('resolves to lemon', async ()=> {
	await expect(Promise.resolve('lemon').resolves.toBe('lemon');
	await expect(Promise.resolve('lemon').resolves.not.toBe('apple');
});

.toHaveBeenCalled()

  • jest.fn() 으로 만든 mock function 을 이용해서 원하는 parameter로만 함수가 불리는지 테스트
function drinkAll(callback, flavour) {
  if (flavour !== 'octopus') {
    callback(flavour);
  }
}

describe('drinkAll', () => {
  test('drinks something lemon-flavoured', () => {
    const drink = jest.fn();
    drinkAll(drink, 'lemon');
    expect(drink).toHaveBeenCalled();
  });

  test('does not drink something octopus-flavoured', () => {
    const drink = jest.fn();
    drinkAll(drink, 'octopus');
    expect(drink).not.toHaveBeenCalled();
  });
});

0개의 댓글