我使用 Q 进行了非常基本的 Jasmine 测试,但它似乎不起作用。我只是使用 Jasmine 模拟时钟并尝试使用 Q.delay,我认为它在幕后使用了 setTimeout。
我进行了一些更复杂的测试,涉及从 Q Promise 的 then
处理程序调用 setTimeout()
,这似乎也不起作用,但我认为这个将制作一个更简单的测试用例并发布在 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();
});
(此测试基于类似 SO 问题中找到的测试用例: 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);
这有效 - 在调用 jasmine.clock().tick
后,bar
被打印到控制台。
卸载Jasmine时钟后,正常时钟开始工作,等待10秒后,打印出foo
。
有人知道发生了什么事吗?
最佳答案
您要求它以同步方式进行异步。不。尝试使用 Jasmine 的异步并放弃使用时钟。
it('clock test', function(done) {
var foo = null;
Q.delay('hi', 10000).then(function(arg) {
console.log('foo');
foo = arg;
expect(foo).toEqual('hi');
done();
});
}, 15000);
关于javascript - Q.delay 无法与 Q Promise 库和 Jasmine 时钟一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181807/