[typescript] 타입스크립트 단위 테스트 작성 시 스파이(Spy) 패턴 활용 방법

소프트웨어 개발에서 테스트 주도 개발(Test-Driven Development, TDD)은 매우 중요합니다. 테스트 주도 개발을 수행하면 코드의 신뢰도가 향상되고, 버그를 미리 발견하여 수정할 수 있습니다.

타입스크립트(Typescript) 프로젝트에서 단위 테스트를 작성할 때, 종종 모의(Mock) 및 스파이(Spy) 기법이 사용됩니다. 스파이 패턴은 함수나 메소드가 호출되었는지, 어떻게 호출되었는지 등의 정보를 기록하고 검증하는 기법입니다.

이번 글에서는 타입스크립트 단위 테스트에서 스파이 패턴을 활용하는 방법에 대해 살펴보겠습니다.

1. 스파이(Spy)란?

스파이는 함수 또는 메소드를 감시하고, 해당 함수/메소드의 호출 여부, 전달된 매개변수, 반환값 등을 기록하는 목적으로 사용됩니다. 다음은 Jest를 사용한 예시입니다.

const myFunction = (param: number) => {
  return param * 2;
};

const spy = jest.fn(myFunction);
// 함수 호출 여부 확인
expect(spy).toHaveBeenCalled();
// 전달된 매개변수 확인
expect(spy).toHaveBeenCalledWith(5);
// 반환값 확인
expect(spy).toHaveReturnedWith(10);

2. 타입스크립트에서 스파이 패턴 활용하기

타입스크립트에서는 주로 Jest, Sinon, Jasmine, 등의 테스트 라이브러리를 활용하여 스파이를 구현할 수 있습니다.

예를 들어, Jest에서 스파이를 활용해보겠습니다.

// app.ts
class Calculator {
  add(a: number, b: number) {
    return a + b;
  }
}

// app.test.ts
import { Calculator } from './app';

test('Calculator.add should be called with the right arguments', () => {
  const calculator = new Calculator();
  const addSpy = jest.spyOn(calculator, 'add');
  
  calculator.add(2, 3);
  
  expect(addSpy).toHaveBeenCalledWith(2, 3);
});

위 코드에서, jest.spyOn을 이용해 Calculator 클래스의 add 메소드를 스파이하고, 이후에 호출된 메소드에 대해 매개변수가 올바르게 전달되었는지를 확인합니다.

3. 마무리

이렇게하여 타입스크립트 프로젝트에서 효과적으로 스파이 패턴을 활용하여 단위 테스트를 작성할 수 있습니다. 스파이 패턴을 잘 활용하면, 코드의 동작을 정확하게 확인하고, 버그를 이른 시점에 발견하여 수정할 수 있게 됩니다.

더 많은 정보를 원하시거나 다른 테스트 기법에 대해 알고 싶다면, 관련 문서를 참고해보시기 바랍니다.

참고 자료