【发布时间】:2014-08-28 11:18:14
【问题描述】:
我正在测试一段异步代码,如下所示:
randomService.doSomething().then(function() {
console.log('I completed the operation!');
});
令我惊讶的是(对我来说)我发现它只有在包裹在 jasmine 的 runs 函数中时才会成功(即显示 console.log 输出),如下所示:
var isDone = false;
runs(function() {
randomService.doSomething().then(function(data) {
console.log('I completed the operation!');
isDone = true;
});
});
waitsFor(function() {
return isDone;
}, 'Operation should be completed', 1000);
据我了解,我认为waitsFor 只是为了延迟代码,换句话说,如果我有更多代码必须延迟到异步调用完成之后,我会使用它 - 换句话说,我会以为我没有理由使用runs 和waitsFor,因为在这段代码之后没有任何内容,对吧?这就是我从阅读这个问题中得到的印象:What do jasmine runs and waitsFor actually do? 但显然我在某些时候把自己搞混了。
有人对此有什么想法吗?
编辑: 这是一个更详细的问题的Plunker: http://plnkr.co/edit/3qnuj5N9Thb2UdgoxYaD?p=preview
请注意第一个测试总是通过,而第二个测试却失败了。 另外,我确定我之前应该提到过这一点,但这是使用 angularJS 和 Jasmine 1.3。
【问题讨论】:
-
如果我可以建议的话 - 现在 Mocha 已经支持原生承诺,真的没有充分的理由将 Jasmine 与承诺一起使用。
-
@Benjamin-Gruenbaum 好吧,我绝对愿意尝试新事物,我真的更愿意坚持使用 Jasmine,因为我现在正在做的项目是使用 angularJS,而且似乎Jasmine 是 Angular 的首选测试方法,但如果我错了,请纠正我。
-
因为你使用的是 angular,所以我会坚持使用 jasmine。
标签: javascript angularjs unit-testing asynchronous jasmine