Я просто даю попытку модульного тестирования в javascript/coffeescript с жасмином, очень приятно.jasmine.Clock VS sinon.clock Что случилось с моим jasmin.Clock.useMock() использованием?
Я пытался использовать jasmine.Clock.Mock() для того, чтобы заранее активировать обратные вызовы setTimeout.
Увы, у jasmine.Clock.tick (1001), похоже, не было никакого эффекта! Я тогда обнаружил sinon.js, у которого было свое собственное время, и используя это, все было в порядке. Я хотел бы понять, почему.
Вот фиктивная JQuery плагин для тестирования:
dummy_method = function(callback) {
fire_callback = function() {
callback();
}
setTimeout("fire_callback()", 1000);
}
И вот обе версии спецификации:
# Working test (spy was called as expected), using sinon FakeTimers
describe "jQuery.fn.countdown", ->
beforeEach() ->
this.clock = sinon.useFakeTimers();
afterEach() ->
this.clock.restore()
it 'should fireup the callback', ->
countdown_callback = jasmine.createSpy('countdown_callback');
dummy_method(countdown_callback)
this.clock.tick(1001)
expect(countdown_callback).toHaveBeenCalled()
# Non-working test (spy is never called), using jasmine Clock Mock
describe "jQuery.fn.countdown", ->
beforeEach() ->
jasmine.Clock.useMock()
it 'should fireup the callback', ->
countdown_callback = jasmine.createSpy('countdown_callback');
dummy_method(countdown_callback)
jasmine.Clock.tick(1001)
expect(countdown_callback).toHaveBeenCalled()
Черт побери! Я даже не знал, что объект функции может быть передан в setTimeout и setInterval ... Плохая привычка, я думаю :( – demental