QUnit和失败的JSONP场景

时间:2014-04-29 02:42:42

标签: jquery ajax json jsonp qunit

我想测试我的网络应用处理故障情况并使用QUnit显示相应的错误消息。

我的应用执行JSONP请求以获取其初始化内容。我想测试启动时我的数据源不可用的情况。这种情况导致底层JQuery代码出错,我相信QUnit正在拦截并将其捕获为失败的断言,即使这是预期的行为。

我的应用代码如下所示:

loadContents() {
    $.ajax({
        url: initURL,
        dataType: 'jsonp',
        timeout: timeout,
        success: initializeDisplay,
        error:   displayErrorMessage,
    });
}

我的测试用例如下:

asyncTest("Invalid initialization host", 1, function() {
    initURL = invalidURL;
    loadPageContents();
    index = $("#error-message-div").text().indexOf(errorMessage);
    ok(index > -1, "Error message not found");
})

当我运行测试时,我得到一个额外的断言,它总是失败。断言包含消息:“加载脚本时出错”,其中包含JSONP GET请求的URL。

我认为我遇到的问题是,由于永远不会执行JSONP回调,因此它会抛出一个QUnit认为是失败的断言的异常。

任何想法如何在不将异常注册为失败的情况下让我的测试执行?

更新 - 为了澄清,QUnit断言按预期工作,但我在某种程度上得到一个额外的断言,它总是失败。

谢谢!

1 个答案:

答案 0 :(得分:0)

知道原因是JSONP调用在后台失败,为了在测试期间抑制此错误,我必须在预期错误时向文档对象添加错误处理程序。

  errorNamespace = "error.test"
  $(document).on(errorNamespace, function(event) {
      ok(true, "Received expected error");
      // Prevent the error from propagating into the assertion
      event.stopPropagation();
      // Remove the error handler to allow other errors to flow
      $(document).off(errorNamespace);
  });

不幸的是,错误事件不包含任何可以帮助我验证捕获的错误是我预期错误的信息,这可能很麻烦。