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