Qunit ajax async calls with mockajax



我正在尝试构建Qunit测试以测试AJAX帖子调用。我正在使用Mockajax嘲笑通话。但是,我无法接受测试来处理异步调用。

这是我的源代码:

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');
});

第一个测试失败,第二个测试成功。如果我在成功回调的源中发表评论,我会发现帖子成功并更改元素文本。

换句话说,除了测试帖子的结果外,一切都可以正常工作。

我已经查看了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);
  // ^^^
});

我在Qunit的Github中看到了这样的示例,所以我想这是正确的,但是我可以看到您不够设置时间功能足够高的问题。

我已经移动了成功发生的所有处理:错误:邮政功能之外,因此我可以独立于Ajax调用进行测试,但是我仍然想测试实际帖子是否有各种类型的错误。

最新更新