gpt4 book ai didi

jquery - 无法监视 Jasmine 单元测试中 ajax 的交错成功回调

转载 作者:行者123 更新时间:2023-12-01 05:54:16 25 4
gpt4 key购买 nike

在源代码中,我有一个 getJSON 调用和两个成功回调,结构如下。

要测试的源代码:

jsonMakeLineOrderData = $.getJSON(url, jsonData,
function (data) {
console.log("Inside 1st callback");
//… some other statement
}).success(function (data) { // line# 1
console.log("Inside 2nd callback");
//… some other statement
});

我正在使用 Jasmine 测试框架来测试此调用的成功 block 。

为了伪造/模拟ajax调用,我使用了spyOn实用程序。

我的 Jasmine 测试规范:

it ("Test Function",function(){
var data = <json_data>;
var d;
spyOn($, "ajax").andCallFake(function(params) {
params.success(data); // line# 2
d = $.Deferred();
d.resolve(data);
return d.always();
});
});

在上面的示例中,我能够测试第一个回调,但无法测试第二个回调。

由于测试规范中的第 2 行,第一个回调正在执行。

我尝试使用 jQuery 延迟实例来执行第二个回调,但如果我更改,它会抛出 “TypeError: $.getJSON(...).success is not a function” 错误源文件第 # 1 行中的 .success() 语句到 .done() 测试用例工作正常,但我无法使其工作.success(),不幸的是我不打算更改源文件,所以我必须使用.success()

如果有人有任何解决方案,请告诉我。

提前致谢。

最佳答案

您必须返回一个将调用回调的函数,如下所示:

it ("Test Function",function(){
var data = <json_data>;
spyOn($, "getJSON").andReturn({success: function(c){c(data)}});
});

为了更容易进行ajax测试,我建议sinonJS它有一个简单的方法来模拟 ajax fake server .

关于jquery - 无法监视 Jasmine 单元测试中 ajax 的交错成功回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575523/

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