首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Jasmine验证jQuery AJAX事件?

如何使用Jasmine验证jQuery AJAX事件?
EN

Stack Overflow用户
提问于 2011-01-12 05:04:57
回答 5查看 60.7K关注 0票数 115

我正在尝试使用Jasmine为基本的jQuery AJAX请求编写一些BDD规范。我目前使用的是独立模式下的Jasmine (即通过SpecRunner.html)。我已经将SpecRunner配置为加载jquery和其他.js文件。你知道为什么下面的方法不起作用吗?has_returned不会变成真的,即使是“雅皮!”警报显示得很好。

代码语言:javascript
复制
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相关的博客/材料的指针都将非常感谢。

EN

回答 5

Stack Overflow用户

发布于 2011-01-13 01:00:01

看看jasmine-ajax项目:http://github.com/pivotal/jasmine-ajax

它是一个临时帮助器,它(对于jQuery或Prototype.js)存根在XHR层,这样请求就永远不会发出。然后,您可以期待有关该请求的所有信息。

然后,它允许您为所有用例提供fixture响应,然后为您想要的每个响应编写测试:成功、失败、未经授权等。

它将Ajax调用带出了异步测试的领域,并为测试实际的响应处理程序应该如何工作提供了很大的灵活性。

票数 13
EN

Stack Overflow用户

发布于 2013-02-01 18:13:25

下面是一个简单的app js测试套件示例:

代码语言:javascript
复制
var app = {
               fire: function(url, sfn, efn) {
                   $.ajax({
                       url:url,
                       success:sfn,
                       error:efn
                   });
                }
         };

一个测试套件示例,它将根据url regexp调用回调

代码语言:javascript
复制
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();
 });
});
票数 7
EN

Stack Overflow用户

发布于 2011-05-22 08:51:55

当我用Jasmine指定ajax代码时,我通过监视发起远程调用的依赖函数(比如$.get或$ajax)来解决这个问题。然后,我检索设置在它上面的回调函数,并对它们进行离散测试。

下面是我最近给出的一个例子:

https://gist.github.com/946704

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4662641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档