鑑於這種代碼:在測試JavaScript時,比setTimeout更好地等待asnyc回調嗎?
showForm = function (url) {
return $.get(url, function (html) {
$('body').append();
});
};
當使用sinon.js
,jQuery.mockjax.js
和expect.js
,我有以下測試通過:
it("showForm calls jQuery.append", function() {
$.mockjax({
url: '/fake'
});
var spy = sinon.spy($.fn, "append");
presenter.showForm('/fake');
setTimeout(function() {
expect(spy.called).to.be.equal(true);
}, 1000);
});
使用setTimeout
功能等待從異步回調$.get
味道不好如果我做得太多,它會減慢我的測試套件。
但是,我覺得這個意圖是相當清楚的,它似乎確實測試了我想要的。
有沒有更好的方法,你能解釋一下你的答案是怎麼回事?
你可以使ajax調用async:false? –
謝謝,不是在這種情況下,而不是在mockjax服務器(我可以看到) – davy