想知道是否有人可以幫助我 - 我試圖測試我的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.
我錯過了什麼?
感謝您的評論已更新上述問題與我已經嘗試過你的方法。這兩種方式在超時後都失敗了,所以如果你有任何反饋,我會很感激! –
對不起,遲到的回覆,查看我更新的答案,並讓我知道如果有幫助! –