[javascript] 자바스크립트 테스트 더블 사용 방법

테스트 더블은 소프트웨어 테스트에서 외부 의존성을 대체하는 객체입니다. 자바스크립트에서는 주로 스탭, 스탠드인, 스퍼이로 테스트 더블을 구현합니다. 테스트 더블은 테스트를 안정적으로 실행하고, 의존성을 줄이며, 테스트 코드의 실행 속도를 빠르게 합니다.

스탭(Stub)

스탭은 특정한 상황에 따라 예정된 반환 값을 강제로 설정함으로써 의존성을 대체합니다. 예를 들어, 외부 API 요청을 대신하여 스탭을 사용하여 목표 값을 반환할 수 있습니다.

// 외부 API 요청을 대신하여 스탭을 사용하여 목표 값을 반환
class ExternalAPI {
  fetchData() {
    return fetch('https://external-api.com/data');
  }
}

class StubbedAPI {
  fetchData() {
    return Promise.resolve({ data: 'stubbed data' });
  }
}

스탠드인(Stub)

스탠드인은 다른 객체나 함수를 대신하여 호출을 기록하고, 반환값을 제공하거나 예외를 던지며, 호출된 횟수를 검증합니다.

// 예제 라이브러리를 스탠드인으로 대체하여 호출된 횟수를 검증
const originalLibrary = require('library');

class StandInLibrary {
  constructor() {
    this.calledTimes = 0;
  }

  someMethod() {
    this.calledTimes++;
    return 'stubbed result';
  }
}

스퍼이(Spy)

스퍼이는 런타임에 호출된 함수의 동작을 기록하여 나중에 검증하는데 사용됩니다.

// 특정 함수 호출을 스퍼이를 사용하여 기록하고 검증
function originalFunction() {
  // 원래 함수 동작
}

const spiedFunction = jest.fn(originalFunction);

// ... 코드 실행

expect(spiedFunction).toHaveBeenCalled();

테스트 더블을 사용하여 자바스크립트 코드의 의존성을 관리하고, 테스트 수행의 안정성과 속도를 향상시킬 수 있습니다.

참고자료: Mocha - Test Doubles


간단히, 자바스크립트에서 테스트 더블을 활용하는 방법에 대해 알아보았습니다. 테스트 더블은 테스트의 안정성과 신속성을 향상시키는데 큰 도움이 됩니다.