[javascript] Chai를 이용한 스텁(stub)과 스파이(spy)의 사용법은?

개요

Chai는 자바스크립트 테스트 라이브러리 중 하나로, 스텁(stub)과 스파이(spy) 기능을 제공합니다. 스텁은 함수의 반환값을 임의로 지정하여 테스트할 때 사용하고, 스파이는 함수가 호출되었는지 여부를 확인할 때 사용합니다. 본 문서에서는 Chai를 이용한 스텁과 스파이의 사용법을 설명합니다.

스텁(Stub) 사용법

Chai를 이용하여 함수를 스텁하는 방법은 다음과 같습니다:

const chai = require('chai');
const sinon = require('sinon');

const expect = chai.expect;

// 스텁을 사용할 함수
function sayHello(name) {
  return `Hello, ${name}!`;
}

describe('sayHello()', () => {
  it('should return a stubbed value', () => {
    // 스텁 생성
    const stub = sinon.stub().returns('Stubbed value');

    // 함수에 스텁 적용
    sinon.replace(sayHello, 'return', stub);

    // 함수 호출
    const result = sayHello('John');

    // 스텁된 값인지 확인
    expect(result).to.equal('Stubbed value');
  });
});

위의 예제에서는 sayHello() 함수를 스텁하여 반환값을 Stubbed value로 지정합니다. sinon.stub() 메서드를 사용하여 스텁을 생성하고, sinon.replace() 메서드를 사용하여 함수에 스텁을 적용합니다. 함수를 호출한 결과는 스텁된 값과 같은지 확인합니다.

스파이(Spy) 사용법

Chai를 이용하여 함수가 호출되었는지 여부를 확인하는 방법은 다음과 같습니다:

const chai = require('chai');
const sinon = require('sinon');

const expect = chai.expect;

// 스파이를 사용할 함수
function doSomething() {
  console.log('Doing something...');
}

describe('doSomething()', () => {
  it('should be called', () => {
    // 스파이 생성
    const spy = sinon.spy(console, 'log');

    // 함수 호출
    doSomething();

    // 함수가 스파이로 호출되었는지 확인
    expect(spy.calledOnce).to.be.true;

    // 스파이 복원
    spy.restore();
  });
});

위의 예제에서는 doSomething() 함수가 호출되었는지를 스파이로 확인합니다. sinon.spy() 메서드를 사용하여 스파이를 생성하고, 함수를 호출한 이후에 spy.calledOnce 속성을 확인하여 함수가 한 번 호출되었는지를 검증합니다. 스파이를 복원하여 다른 테스트에 영향을 주지 않도록 합니다.

결론

Chai를 이용하여 함수의 반환값을 스텁하는 방법과 함수가 호출되었는지를 확인하는 방법을 알아보았습니다. 이러한 기능들을 이용하면 테스트 코드 작성 시 편리하게 사용할 수 있습니다. Chai의 공식 문서를 참조하여 더 자세한 사용법을 익힐 수 있습니다.

참고 자료