[javascript] Jest에서의 테스트 더블(Test double) 활용 방법은 어떻게 되는가?
Jest는 JavaScript 프로젝트를 테스트하기 위한 강력하고 유연한 도구입니다. 테스트 더블(Test Double)은 실제 의존성을 대신하여 테스트 환경을 격리하여 테스트를 더욱 쉽게 만들어주는 기법입니다. 이를 통해 테스트의 신뢰성을 확보할 수 있습니다.
테스트 더블(Test Double)이란?
테스트 더블(Test Double)은 실제 의존성을 대체하는 객체로, 다음과 같은 형태로 사용됩니다.
- Stub: 호출될 때 미리 정의된 결과를 반환하는 객체입니다.
- Spy: 호출될 때 호출 여부와 매개변수 등을 기록하는 객체입니다.
- Mock: 호출될 때 기대되는 동작을 갖는 객체입니다.
Jest에서의 테스트 더블 활용 방법
Jest에서는 테스트 더블을 만들고 사용하는 다양한 방법을 제공합니다.
Stub 사용하기
const myFunction = jest.fn().mockReturnValue(42);
console.log(myFunction()); // 42
위의 예제에서는 myFunction
을 스텁으로 사용하여 호출될 때 항상 42를 반환하도록 설정했습니다.
Spy 사용하기
const myFunction = jest.fn();
myFunction(1, 2, 3);
myFunction('hello');
console.log(myFunction.mock.calls); // [[1, 2, 3], ['hello']]
console.log(myFunction.mock.calls.length); // 2
위의 예제에서는 myFunction
을 스파이로 사용하여 호출 여부와 매개변수를 기록하였습니다.
Mock 사용하기
const myFunction = jest.fn();
myFunction.mockImplementation(() => 'mocked value');
console.log(myFunction()); // 'mocked value'
위의 예제에서는 myFunction
을 목(Mock)으로 사용하여 호출될 때 ‘mocked value’를 반환하도록 설정하였습니다.
주의사항
- 테스트 더블을 사용할 때에는 의존성 대상 객체의 메서드 또는 함수를 직접 수정하거나 덮어쓰는 것이 아닌, 테스트 환경에서만 임시로 수정하여 사용해야 합니다.
- 테스트 더블을 효과적으로 활용하기 위해서는 모의 객체(Mocking)에 대한 개념과 사용법을 잘 이해해야 합니다.
결론
Jest에서는 테스트 더블을 통해 의존성을 대체하여 테스트 환경을 격리하고, 테스트를 더욱 쉽게 작성할 수 있습니다. Stub, Spy, Mock 등 여러가지 테스트 더블을 활용하는 방법을 익혀서 테스트의 신뢰성을 확보하는 것이 중요합니다.
참고 자료: