jest.spyOn은 Jest 테스트 프레임워크에서 제공하는 함수로, 특정 객체의 메서드를 spyOn(간첩)하여 해당 메서드 호출에 대한 정보를 수집하고 제어할 수 있게 해줍니다. 이를 통해 해당 메서드가 호출되었는지, 호출 횟수는 몇 번인지, 어떤 매개변수로 호출되었는지 등을 확인하거나, 특정 메서드의 반환값을 가로채거나 변경할 수 있습니다.
주로 테스트 시에 사용되며, 모의 객체(Mock)를 생성하거나 특정 객체의 행위를 감시하고 테스트하는 데 유용합니다. 예를 들어, 다음은 jest.spyOn을 사용하여 특정 객체의 메서드를 spyOn 하는 예시입니다.
// 가정해보자: 특정 객체의 메서드
class Calculator {
add(a, b) {
return a + b;
}
subtract(a, b) {
return a - b;
}
}
// Calculator 객체의 add 메서드를 spyOn하여 감시
test('spyOn을 사용하여 add 메서드 감시', () => {
const calculator = new Calculator();
// spyOn을 통해 add 메서드를 감시
const spyOnAdd = jest.spyOn(calculator, 'add');
// 객체의 add 메서드를 호출
calculator.add(2, 3);
// spyOnAdd를 통해 호출된 횟수, 호출된 매개변수 등 확인 가능
expect(spyOnAdd).toHaveBeenCalledTimes(1);
expect(spyOnAdd).toHaveBeenCalledWith(2, 3);
// spy를 리셋하여 원래의 함수를 복원할 수 있음
spyOnAdd.mockRestore();
});
위 코드에서 jest.spyOn을 사용하여 Calculator 객체의 add 메서드를 spyOn하여 해당 메서드 호출에 대한 정보를 수집하고, toHaveBeenCalledTimes와 toHaveBeenCalledWith를 사용하여 호출 횟수와 호출된 매개변수를 확인합니다. 또한, mockRestore를 통해 spyOn한 메서드의 원래 동작을 복원할 수 있습니다.
이를 통해 Jest의 spyOn을 사용하면 테스트 중에 객체의 특정 메서드를 감시하고 제어할 수 있어 테스트 작성 및 디버깅을 편리하게 할 수 있습니다.