2016-11-03 7 views
-1

필자는 정기적으로 값을 내보내도록 내 라이브러리에 대한 사양을 만들었습니다. 나는 sinonjs를 사용하고 있으며 콜백을 스파이로 만들었습니다. 나는 sinonjs에서 가짜 타이머를 사용하여 10 초의 여분의 두 간격을 시뮬레이트했다. 그러나 테스트가 틱 메서드를 처음 사용할 때 착오되면 오류가 발생합니다. 나는이 내 생산 코드 내 테스트예상 오류가 발생하는 이유는 무엇입니까?

it('should emit the values at an interval', function() { 
    var callback = this.sandbox.spy(); 
    var interval = this.sandbox.useFakeTimers(); 

    this.myLib.emitValues(callback); 

    interval.tick(1000); 
    interval.tick(1000); 

    callback.should.have.been.calledWith('test'); 
}); 

아래를

ExpectationError: Unexpected call: getTheValue() 
Expectation met: getTheValue([...]) once 

이 코드 아래의 오류가 발생

_getValue() { 
    var value = getTheValue(this.id); 

    this.myListener(value); 
} 

emitValues(callback) { 
    this.myListener = callback; 

    this._getValue(); 
    setInterval(() => this._getValue(), 1000); 
} 

아무도 내가이 오류가 될 수있는 이유는 어떤 생각을 가지고 있습니까 ?

+0

생산 코드를 표시하십시오. – luboskrnac

+0

프로덕션 코드를 추가했습니다. –

+0

나는 여전히 우리가 당신의 코드를 완전히 생각한다고 생각하지 않는다. 예 : 'getTheValue'는 어디에 정의되어 있습니까? 가짜는 어디에 있습니까? 'this'는 많이 사용됩니다. 우리가 당신의 외부 범위를 알아낼 수 있도록 코드를 둘러 쌈을 보여주십시오. 테스트 및 생산 코드 용. – luboskrnac

답변

0

콜백이 여러 번 호출 될 것으로 예상되는 경우 calledWith 또는 calledWithExactly을 사용하고 예상 한 각 호출에 대해 다양한 매개 변수를 제공하십시오.

sinon-chai은 Sinon 위에있는 API 래퍼입니다. 따라서 이러한 기대에 대해 더 많은 것을 읽을 수 있습니다 in Sinon docs.

관련 문제