[javascript] Mocha에서 Test double을 사용하여 외부 의존성을 모의하는 방법은?

Mocha는 JavaScript의 테스트 프레임워크로, 외부 의존성을 모의(Mock)하는 기능을 제공합니다. 외부 의존성을 모의하는 것은 테스트를 좀 더 격리된 환경에서 실행하여, 테스트의 신뢰성을 높이는데 도움이 됩니다. 이를 통해 간접적으로 연결되는 코드나 외부 API 호출 등에 의존하지 않고 테스트할 수 있습니다.

Mocha에서 외부 의존성을 모의하려면, Sinon.js와 같은 테스트 더블(test double) 라이브러리를 사용할 수 있습니다. Sinon.js는 스파이(spy), 스텁(stub), 모의 객체(mock object) 등 다양한 테스트 더블 기능을 제공합니다.

다음은 Mocha와 Sinon.js를 사용하여 외부 의존성을 모의하는 예제 코드입니다:

const sinon = require('sinon');

describe('MyModule', () => {
  it('should call external dependency with correct arguments', () => {
    // 외부 의존성에 대한 스텁 생성
    const externalDependencyStub = sinon.stub();
    
    // 테스트 대상 모듈에서 외부 의존성을 스텁으로 치환
    const myModule = require('../src/myModule');
    myModule.externalDependency = externalDependencyStub;
    
    // 테스트 실행
    myModule.doSomething();
    
    // 스텁이 올바른 매개변수로 호출되었는지 검증
    sinon.assert.calledWith(externalDependencyStub, 'some argument');
  });
});

위의 예제에서는, MyModule이라는 테스트 대상 모듈을 테스트하는데 외부 의존성을 모의하기 위해 Sinon.js의 stub을 사용했습니다. externalDependencyStub은 외부 의존성의 가짜 함수로써, 테스트 대상 모듈 내에서 이를 원하는 대로 설정하고 호출할 수 있습니다.

테스트가 실행되는 동안, myModule에서 doSomething이 호출되면 externalDependency 함수가 externalDependencyStub으로 대체됩니다. 이렇게 함으로써, doSomething 내에서 실제로 외부 의존성을 호출하지 않고도 테스트를 진행할 수 있습니다.

마지막으로, sinon.assert.calledWith를 사용하여 스텁이 올바른 매개변수로 호출되었는지를 검증합니다. 이를 통해 테스트가 올바르게 외부 의존성을 사용하는지 확인할 수 있습니다.

추가로, Sinon.js는 다양한 기능과 설정 옵션을 제공하므로 테스트에 필요한 모든 상황에 대처할 수 있습니다. Sinon.js 문서를 참고하여 더 자세한 정보를 얻을 수 있습니다.

참고 문헌: