【问题标题】:QUnit and a fail JSONP scenarioQUnit 和失败的 JSONP 场景
【发布时间】:2014-04-29 02:42:41
【问题描述】:

我想测试我的 web 应用程序是否处理失败场景并使用 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 断言按预期工作,但是我不知何故得到了一个额外的断言,它总是失败。

谢谢!

【问题讨论】:

    标签: jquery ajax json jsonp qunit


    【解决方案1】:

    知道原因是 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);
      });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多