【发布时间】:2016-03-08 10:45:00
【问题描述】:
想知道是否有人可以帮助我 - 我正在尝试使用 Jasmine (1.3) 测试我的 js,但我无法找出在 .then 或 .done 方法中测试任何方法调用的最佳方法。
示例代码说明:
Backbone.View.extend({
myMethod: function () {
this.something.done(function () {
this.doSomethingElse();
}.bind(this));
}
})
我想编写一个测试来检查 this.doSomethingElse 是否被调用。
我正在查看 jasmine.async 和 waitsFor/runs 设置,但我不确定它如何适合外部代码,即我不会在我的实际代码中调用 done() 来让我的测试工作.另外,如果我在 this.something 上模拟 done 方法,那么我就不再测试实际的实现了,对吧?
我只是想念事物如何组合在一起。如果有人能指出我正确的方向,我将不胜感激!
更新:根据下面的反馈,我现在尝试了以下方法
嘿,感谢您的回答 - 我想也许我没有正确的最后一部分 - 尝试了 2 种不同的方法,都是初始通过,但在一两秒后失败。
it('calls doSomethingElse on done',function () {
var mockDeferred = $.Deferred();
myView.something = mockDeferred;
spyOn(myView,'doSomethingElse');
mockDeferred.resolve();
waitsFor(function () {
expect(myView.doSomethingElse).toHaveBeenCalled();
});
});
还有:
it('calls doSomethingElse on done',function () {
var mockDeferred = $.Deferred(),
someTrigger = false;
myView.something = mockDeferred;
spyOn(myView,'doSomethingElse');
runs(function () {
mockDeferred.resolve();
someTrigger = true;
});
waitsFor(function () {
someTrigger = true;
});
runs(function () {
expect(myView.doSomethingElse).toHaveBeenCalled();
});
});
在这两种情况下,测试最初都会通过,但在一两秒后超时失败。
我错过了什么吗?
【问题讨论】:
标签: javascript testing jasmine