与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

回到顶部