2016-11-03 5 views
-1

Я создал спецификацию для своей библиотеки, чтобы гарантировать, что значение испускается с регулярным интервалом. Я использую sinonjs и создал обратный вызов в качестве шпиона. Я использую поддельный таймер в синонах, чтобы имитировать дополнительные два интервала в 10 секунд. Однако, когда тест приземляется при первом использовании метода тика, это когда выдается ошибка. Я произвожу ошибку нижеПочему я получаю ошибку ожидания?

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

Ниже приведен код для моего теста

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'); 
}); 

Это мой код продукции

_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 - это просто обертка API поверх Синона. Поэтому вы можете больше узнать об этих ожиданиях in Sinon docs.