У меня очень простой тест Жасмина с использованием Q, и он, похоже, не работает. Я просто использую часы Jasmine mock и пытаюсь использовать Q.delay, который, я думаю, использует setTimeout под капотом.Q.delay не работает с библиотекой Q обещаний и часами Жасмина?
У меня было несколько более сложных тестов, связанных с вызовом setTimeout()
с обработчиком 0 обещания then
, и это тоже не сработало, но я подумал, что это сделает более простой тестовый случай для публикации в Stack Overflow.
Вот мой очень простой тест:
it('clock test', function() {
jasmine.clock().install();
var foo = null;
Q.delay('hi', 10000).then(function(arg) {
console.log('foo');
foo = arg;
});
jasmine.clock().tick(10010);
expect(foo).toEqual('hi');
jasmine.clock().uninstall();
});
(Этот тест основан на тесте, найденного в аналогичной С.О. вопрос: Jasmine clock tick & Firefox: failing to trigger a Q.delay method)
Когда я запускаю тест, он не говорил Expected null to equal 'hi'.
console.log
даже не выполняет.
Чтобы увидеть, если проблема была с Q или что-то другое, я пытался добавить простой setTimeout
вызов внутри спецификации:
setTimeout(function() {
console.log("bar");
}, 10000);
Это сработало - bar
была напечатана в консоли после вызова jasmine.clock().tick
.
После того, как часы Jasmine будут удалены, начнутся нормальные часы, и после ожидания 10 секунд будет распечатано сообщение foo
.
У любого есть идеи, что происходит?
Я попробовал, и спецификация истекла: 'Error: Тайм-аут - Асинхронный обратный вызов не был вызван по истечению времени, указанного by jasmine.DEFAULT_TIMEOUT_INTERVAL.' Затем, снова, как только часы жасмина были удалены, через 10 секунд напечатано 'foo'. –
@JoeAttardi обновлен. –
Ну, конечно, это работает, но для запуска требуется 10 секунд. Я хотел использовать часовые часы Жасмина, так что это не так. Он должен работать. Когда вы устанавливаете() 'часы Jasmine, он заменяет глобальные функции, такие как' setTimeout' и друзей. Поскольку 'Q.delay' использует' setTimeout' под капотом, это должно сработать. Как только вы «отметьте» часы Жасмина за 10 секунд, он должен срабатывать. –