想知道是否有人可以帮助我 - 我试图测试我的js使用茉莉花(1.3),我无法弄清楚测试任何方法调用的最佳方法。然后或者.done方法。茉莉花测试方法.done或.then内
示例代码解释:
Backbone.View.extend({
myMethod: function() {
this.something.done(function() {
this.doSomethingElse();
}.bind(this));
}
})
我想编写一个测试,检查this.doSomethingElse被调用。
我四处寻找jasmine.async和waitsFor/runs的设置,但我不确定它是如何适应外部代码的,即我不打算在我的实际代码中调用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();
});
});
在两种情况下,测试将通过原本,但后超时失败后一秒或2.
我错过了什么?
感谢您的评论已更新上述问题与我已经尝试过你的方法。这两种方式在超时后都失败了,所以如果你有任何反馈,我会很感激! –
对不起,迟到的回复,查看我更新的答案,并让我知道如果有帮助! –