Javascript 在运行jasmine测试用例时,不会命中异步调用
我想测试一个javascript点击事件处理程序,其中有一个从服务器获取数据的ajax(异步)GET调用。 我在done()函数中有所有的业务逻辑。当我在运行jasmine测试用例时保持调试指针时,我发现它根本没有达到done()逻辑。 用茉莉花怎么处理Javascript 在运行jasmine测试用例时,不会命中异步调用,javascript,jquery,jasmine,karma-runner,Javascript,Jquery,Jasmine,Karma Runner,我想测试一个javascript点击事件处理程序,其中有一个从服务器获取数据的ajax(异步)GET调用。 我在done()函数中有所有的业务逻辑。当我在运行jasmine测试用例时保持调试指针时,我发现它根本没有达到done()逻辑。 用茉莉花怎么处理 $('#setup').click(function () { $("div#spinner").addClass('spinner show'); $.ajax({ type: "GET",
$('#setup').click(function () {
$("div#spinner").addClass('spinner show');
$.ajax({
type: "GET",
url: "http://localhost:3000/setup.cgi",
}).done(function () {
$("div#divLoadingSpinner").removeClass('spinner show');
$('#setup').attr('disabled', 'disabled');
});
});
it("should disable clicking of Edit setup", function () {
setup = $("#setup");
setup.click();
console.log(">>" + setup[0].attributes.length);
expect(setup.attr('disabled')).toBeTruthy();
});
您可以使用延迟对象并解析它们以达到成功(完成)场景。见下面的示例。不需要精确,您可以根据您的要求进行修改
spyOn($, 'ajax').and.callFake(function (request) {
var d = $.Deferred();
d.resolve(put your expected data here);
return d.promise();
});
谢谢打字。我找到了这个。还有一件事,我的响应对象将根据请求进行更改。如何实现这一点?我曾经遇到过这个问题:),因此我在函数中使用了条件语句。i、 e.如果req==然后resolve else resolve(甚至拒绝),当我在上述函数中检查request.url时,它总是“未定义”。那个么我怎样才能根据这个做出决定呢?嗯,我从来并没有尝试过在那个假呼叫中访问URL。那个请求没有。该参数可用于调用成功/失败场景。你能试着检查一下最近的电话,然后在里面找到url吗。i、 e.spyOn($,'ajax').and.callFake(函数(请求){var d=$.Deferred();if($.ajax.calls.mostRecent().args[0][“url”]==“yourURL”){d.resolve(将预期数据放在这里);}否则{somethingelse}返回d.promise();});console.log(“URL>>”+$.ajax.calls.mostRecent().args[0][“URL”])。。。。。。这始终是“未定义的”。如何获得准确的URL?