我正在尝试使用Jasmine为基本的jQuery AJAX请求编写一些BDD规范。我目前使用的是独立模式下的Jasmine (即通过SpecRunner.html
)。我已经将SpecRunner配置为加载jquery和其他.js文件。你知道为什么下面的方法不起作用吗?has_returned不会变成真的,即使是“雅皮!”警报显示得很好。
describe("A jQuery ajax request should be able to fetch...", function() {
it("an XML file from the filesystem", function() {
$.ajax_get_xml_request = { has_returned : false };
// initiating the AJAX request
$.ajax({ type: "GET", url: "addressbook_files/addressbookxml.xml", dataType: "xml",
success: function(xml) { alert("yuppi!"); $.ajax_get_xml_request.has_returned = true; } });
// waiting for has_returned to become true (timeout: 3s)
waitsFor(function() { $.ajax_get_xml_request.has_returned; }, "the JQuery AJAX GET to return", 3000);
// TODO: other tests might check size of XML file, whether it is valid XML
expect($.ajax_get_xml_request.has_returned).toEqual(true);
});
});
如何测试回调是否已被调用?任何与使用Jasmine测试异步jQuery相关的博客/材料的指针都将非常感谢。
发布于 2011-01-13 01:00:01
看看jasmine-ajax项目:http://github.com/pivotal/jasmine-ajax。
它是一个临时帮助器,它(对于jQuery或Prototype.js)存根在XHR层,这样请求就永远不会发出。然后,您可以期待有关该请求的所有信息。
然后,它允许您为所有用例提供fixture响应,然后为您想要的每个响应编写测试:成功、失败、未经授权等。
它将Ajax调用带出了异步测试的领域,并为测试实际的响应处理程序应该如何工作提供了很大的灵活性。
发布于 2013-02-01 18:13:25
下面是一个简单的app js测试套件示例:
var app = {
fire: function(url, sfn, efn) {
$.ajax({
url:url,
success:sfn,
error:efn
});
}
};
一个测试套件示例,它将根据url regexp调用回调
describe("ajax calls returns", function() {
var successFn, errorFn;
beforeEach(function () {
successFn = jasmine.createSpy("successFn");
errorFn = jasmine.createSpy("errorFn");
jQuery.ajax = spyOn(jQuery, "ajax").andCallFake(
function (options) {
if(/.*success.*/.test(options.url)) {
options.success();
} else {
options.error();
}
}
);
});
it("success", function () {
app.fire("success/url", successFn, errorFn);
expect(successFn).toHaveBeenCalled();
});
it("error response", function () {
app.fire("error/url", successFn, errorFn);
expect(errorFn).toHaveBeenCalled();
});
});
发布于 2011-05-22 08:51:55
当我用Jasmine指定ajax代码时,我通过监视发起远程调用的依赖函数(比如$.get或$ajax)来解决这个问题。然后,我检索设置在它上面的回调函数,并对它们进行离散测试。
下面是我最近给出的一个例子:
https://stackoverflow.com/questions/4662641
复制相似问题