[typescript] 타입스크립트에서의 모듈(Mock)을 활용한 단위 테스트 방법

타입스크립트로 개발하는 과정에서 단위 테스트는 매우 중요합니다. 테스트 주도 개발 방법론을 따른다면, 모듈(Mock)을 활용하여 코드의 독립성을 보장하는 테스트를 작성할 수 있습니다. 이번 포스트에서는 타입스크립트에서 모듈(Mock)을 활용한 단위 테스트의 방법을 알아보겠습니다.

모듈(Mock)이란?

많은 경우에 개발 중에 특정 모듈이나 외부 의존성을 모의(Mock)로 대체해야 합니다. 이를 통해 외부 시스템과의 결합도를 낮추고 테스트를 더욱 효율적으로 진행할 수 있습니다. 모듈(Mock)을 사용하면 테스트 시 특정 동작이 실행되도록 강제할 수 있으며, 호출되는 함수의 반환 값을 조작할 수도 있습니다.

타입스크립트에서의 모듈(Mock) 활용

1. jest.mock 함수 활용

jest는 JavaScript를 위한 테스트 프레임워크로, 타입스크립트 프로젝트에서도 잘 동작합니다. jest는 jest.mock 함수를 제공하여 모듈(Mock)을 손쉽게 생성하고 주입할 수 있습니다.

예를 들어, 다음은 특정 모듈의 함수를 Mocking하는 예제입니다.

import SomeModule from './SomeModule';

jest.mock('./SomeModule', () => ({
  someFunction: jest.fn(() => 'mocked value')
}));

// ...테스트 수행

위 코드에서 jest.mock을 사용하여 SomeModulesomeFunction을 Mocking했습니다. 이제 SomeModule을 사용하는 코드에서 실제 함수가 아닌 Mock 함수가 호출됩니다.

2. sinon 라이브러리 활용

sinon은 JavaScript에서 모의, 스파이, 스텁과 같은 행위 기반 테스트를 위한 라이브러리입니다. 타입스크립트에서도 사용이 가능하며, jest와 함께 사용할 수 있습니다.

import * as sinon from 'sinon';
import { expect } from 'chai';
import SomeModule from './SomeModule';

describe('SomeModule', () => {
  it('should return mocked value', () => {
    const mock = sinon.stub(SomeModule, 'someFunction').returns('mocked value');

    // ...테스트 수행

    mock.restore();
  });
});

위 코드에서는 sinon.stub을 사용하여 SomeModulesomeFunction을 Mocking하고, 테스트 후에는 복원해줍니다.

결론

타입스크립트에서의 모듈(Mock)을 적극적으로 활용하여 단위 테스트를 작성하면 코드의 독립성 및 안정성을 높일 수 있습니다. jest나 sinon과 같은 테스트 라이브러리를 적절히 활용하여 모듈(Mock)을 사용하면, 코드의 품질을 유지하면서 안정적인 소프트웨어를 개발할 수 있습니다.