与mockajax的Qunit ajax异步调用
我想构建一个Qunit测试来测试ajax后调用。我正在使用mockajax来模拟通话。但是,我无法使测试与异步调用一起工作。与mockajax的Qunit ajax异步调用
这里是我的源代码:
source.js:
ajaxFunc = function(element){ $.post({
type:'POST',
url: '/temp/',
dataType:'json',
success: function(data){
element.text("changed in func");
},
error: function(data){
//do something
},
timeout: 60000
});
}
syncFun = function(element){
element.text("changed in func");
}
这里是我的测试代码:
tests2.js
function mockSuccess(){ $.mockjax({
url: "/temp/",
responseText: { success: true }
});
}
QUnit.test("test ajax async", function(assert) {
mockSuccess();
var done = assert.async();
var element = document.createElement("div");
ajaxFunc($(element));
$(element).text("old");
setTimeout(function() {
assert.strictEqual($(element).text(), 'changed in func');
done();
});
});
QUnit.test("test sync", function(assert) {
var element = document.createElement("div");
$(element).text("old");
syncFun($(element));
assert.strictEqual($(element).text(), 'changed in func');
});
第一次测试失败,第二个成功。如果我在成功回调中的source.js中添加注释,事实上我会看到该帖子成功并更改了元素文本。
换句话说,除测试帖子的结果外,一切正常。
我看过https://qunitjs.com/cookbook/和堆栈溢出的例子,没有运气。
回答:
它看起来像我只需要添加的毫秒数来获得异步调用的工作:
QUnit.test("test ajax async", function(assert) { mockSuccess();
var done = assert.async();
var element = document.createElement("div");
ajaxFunc($(element));
$(element).text("old");
setTimeout(function() {
assert.strictEqual($(element).text(), 'changed in func');
done();
}, 800);
// ^^^
});
我见过的例子像这样在github上的qunit,所以我想这是正确的,但是我可以看到你没有把时间函数设置得足够高的问题。
我已经移动了所有成功发生的处理:和错误:在post函数之外,所以我可以独立于ajax调用来测试它,但我仍然想测试实际的帖子以查看各种类型的错误。
以上是 与mockajax的Qunit ajax异步调用 的全部内容, 来源链接: utcz.com/qa/258663.html