[javascript] Jest에서의 테스트 더블 사용 방법과 주의사항은 어떻게 되는가?

Jest는 JavaScript 테스트 프레임워크로, 테스트 더블을 사용하여 테스트를 더욱 간단하고 효율적으로 작성할 수 있습니다. 이번 글에서는 Jest에서의 테스트 더블 사용 방법과 주의사항을 알아보겠습니다.

1. 모의 객체(Mocking Objects)

모의 객체는 실제 객체를 대신하여 사용되는 객체로, 원하는 방식으로 동작할 수 있도록 스텁(stub)이나 목(mock)으로 조작할 수 있습니다. Jest에서는 jest.fn()jest.mock() 함수를 사용하여 모의 객체를 생성하고 사용할 수 있습니다. 아래는 모의 객체 사용의 예제입니다.

// 실제 함수를 가지는 객체
const calculator = {
  add: (a, b) => a + b,
};

test('Calculator add function', () => {
  const addMock = jest.fn();
  const originalAdd = calculator.add;

  // 모의 객체로 변경
  calculator.add = addMock;

  // 모의 객체에 대한 스텁 설정
  addMock.mockReturnValue(5);

  expect(calculator.add(2, 3)).toBe(5);

  // 함수 호출이 올바르게 되었는지 검증
  expect(addMock).toHaveBeenCalledWith(2, 3);

  // 모의 객체를 원래 객체로 복원
  calculator.add = originalAdd;
});

2. 모듈 모의(Mocking Modules)

Jest에서는 모듈을 모의하여 테스트할 수 있습니다. jest.mock() 함수를 사용하면 원하는 방식으로 모듈을 모의하고 반환값을 조작할 수 있습니다. 아래는 모듈 모의의 예제입니다.

// math.js 모듈
export const add = (a, b) => a + b;

// 모듈 모의
jest.mock('./math', () => ({
  add: jest.fn().mockReturnValue(5),
}));

import { add } from './math';

test('Add function from math module', () => {
  expect(add(2, 3)).toBe(5);
});

주의사항

Jest에서 테스트 더블을 사용할 때에는 몇 가지 주의사항을 염두에 두어야 합니다.

결론

Jest에서는 테스트 더블을 사용하여 테스트를 더욱 효율적으로 작성할 수 있습니다. 모의 객체와 모듈 모의를 사용하여 테스트의 격리성을 높일 수 있으며, 주의사항을 염두에 두어야 테스트의 정확성을 보장할 수 있습니다.