gpt4 book ai didi

jquery - 使用 Q-Unit 进行单元测试 ajax 失败

转载 作者:行者123 更新时间:2023-12-01 01:37:57 24 4
gpt4 key购买 nike

我正在使用 jQuery $.when 来处理 ajax 回调,并且我正在使用 mockjax模拟我的单元测试中的各种响应。其中一个响应返回状态错误 500。我的失败回调抛出一个错误,在 Q-Unit 中我尝试使用“raises”捕获该错误,但我得到的只是实际错误。

这是代码:

var bar = new Object();  
// ajax call, returns a promise object
bar.ajaxCall = function () {
return $.ajax({
url: "foo/foo"
, dataType: "json"
, data: { "blah": "blee" }
});
}

// function I'm testing ...
bar.handleAjax = function () {
return $.when(ajaxCall.call(this))
.done(function(data) { /* Success callback */ })
.fail( throw "Error!!"; });
}

单元测试:

// Mock ajax call in the unit test
var mock = $.mockjax({
url: "foo/foo"
, contentType: "json"
, status: 500
});

// unit test for "load"
loadTest = function () {
test("testing load failure", function () {
stop(); // stop the test so QUnit knows to wait for the ajax response
raises(function () {
var promise = bar.handleAjax();
}, "We expect an error to be thrown");
setTimeout(function() {
start();
}, 500);
});
}

如何重写测试以确保handleAjax在适当的时间抛出错误?

最佳答案

问题在于,在 raises() 内调用 handleAjax() 将立即返回,并且错误将被抛出到该函数之外。

要解决这个问题,您可以使 ajax 调用同步,这样错误将被抛出到 raises() 中。

raises(function () {
$.ajaxSetup({ async: false });
bar.handleAjax();
}, "We expect an error to be thrown");

<强> HERE 是工作代码。

您的问题是您在 fail() 内抛出错误,并且您无法轻松控制何时调用此失败回调并抛出异常,除非您同步执行它。您可以重写代码,而不是抛出错误,而是调用回调。

bar.handleAjax = function(success, error) {
return $.when(this.ajaxCall.call(this))
.done(function() { success && success.call(this); })
.fail(function() { error && error.call(this); });
};

<强> HERE 就是一个例子。

期待更好的想法:)。

关于jquery - 使用 Q-Unit 进行单元测试 ajax 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com