[javascript] Jasmine과 함께 사용되는 Mock 라이브러리 소개

소개

Jasmine은 자바스크립트를 위한 유닛 테스트 도구입니다. 이 도구는 자바스크립트 코드의 동작을 테스트하고 모의 객체(Mock Object)를 사용하여 의존성을 관리하는 데에도 도움을 줍니다.

모의 객체는 테스트 중에 원하는 동작을 가지는 객체를 재현하기 위해 사용됩니다. 따라서 특정 조건에서 테스트를 수행하기 위해 의존성 객체의 동작을 조작하거나, 특정 메소드가 호출되었는지를 확인하는 등의 작업을 수행할 수 있습니다.

이번 포스트에서는 Jasmine과 함께 사용할 수 있는 주요 Mock 라이브러리 몇 가지를 소개하겠습니다.

1. Sinon.js

Sinon.js는 Jasmine과 함께 사용하기 좋은 Mock 라이브러리입니다. Sinon.js는 stub, spy, mock 객체를 생성하고 관리할 수 있습니다. 이 라이브러리를 사용하면 의존성 객체의 동작을 조작하고 메소드의 호출 여부를 확인할 수 있습니다.

예제

const calculator = {
  add: function(a, b) {
    return a + b;
  }
};

const mock = sinon.mock(calculator);
mock.expects("add").withArgs(2, 3).returns(5);

console.log(calculator.add(2, 3)); // 5
console.log(mock.verify()); // true

위 예제에서는 calculator 객체의 add 메소드에 대한 모의 객체를 생성하고, 입력값이 2와 3일 때 5를 반환하도록 기대합니다. 그리고 calculator.add를 호출하여 예상대로 동작하는지 확인합니다.

2. Testdouble.js

Testdouble.js는 Jasmine과 함께 사용하기 쉬운 Mock 라이브러리입니다. 이 라이브러리는 테스트에 필요한 모의 객체를 생성하고, 메소드를 테스트하기 위해 stub 객체를 사용하는 등의 작업을 수행할 수 있습니다.

예제

const calculator = {
  add: function(a, b) {
    return a + b;
  }
};

const stub = td.function();
td.when(stub(2, 3)).thenReturn(5);

console.log(stub(2, 3)); // 5

위 예제에서는 calculator 객체의 add 메소드를 테스트하기 위해 stub 객체를 생성하고, 입력값이 2와 3일 때 5를 반환하도록 설정합니다. 그리고 stub 함수를 호출하여 예상대로 동작하는지 확인합니다.

3. Jasmine-Sinon

Jasmine-Sinon은 Jasmine과 Sinon.js를 함께 사용할 수 있도록 도와주는 라이브러리입니다. 이를 사용하면 Jasmine에서 제공되지 않는 Sinon.js의 기능을 활용할 수 있습니다.

예제

describe("Calculator", function() {
  let calculator;

  beforeEach(function() {
    calculator = {
      add: function(a, b) {
        return a + b;
      }
    };
    spyOn(calculator, "add").and.returnValue(5);
  });

  it("should return the sum of two numbers", function() {
    expect(calculator.add(2, 3)).toBe(5);
    expect(calculator.add).toHaveBeenCalledWith(2, 3);
  });
});

위 예제에서는 Calculator 객체의 add 메소드를 spyOn을 사용하여 대체하고, 반환값을 5로 설정합니다. 그리고 calculator.add를 호출하여 예상대로 동작하는지 확인합니다.

결론

Jasmine과 함께 사용할 수 있는 Mock 라이브러리를 소개했습니다. 이러한 라이브러리를 사용하면 테스트 중에 의존성 객체의 동작을 조작하거나 메소드가 호출되었는지 확인하는 등의 작업을 더욱 쉽게 수행할 수 있습니다. 각 라이브러리의 공식 문서를 참고하여 사용법을 자세히 알아보세요.