[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의 공식 문서를 참조하여 더 자세한 사용법을 익힐 수 있습니다.