微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jasmine 2.0如何处理ajax请求

我想测试一个包含ajax请求的函数.测试应该等待ajax-request成功/失败.运行测试不起作用,因为它现在不会等待.

这个我想测试一下:

this.requestServerBoxId = function()
{
    //ajax-request
    $.ajax({
        url: this.host_addr+"/?getid="+this.name,type: 'POST',data: {_data:this._data},success: function(data) {
            return IdSuccess(data);
        },error: function(data){
            return false;
        }
    });
}
function IdSuccess(data){
   if(typeof data != undefined)
       return true;
    return false;
}

这是我的测试:

it("should call a function after ajax-success",function(){
    expect(this.Process.requestServerBoxId()).toBe(true);
});

我试过间谍,但我猜我错了:

spyOn($,'ajax' ).and.returnValue(123);

我希望每次ajax请求发出时,这个间谍都会返回123.但它不起作用.

解决方法

使用Jasmine 2.0,有一个全新的API用于测试ajax(以及其他所有内容).

代替:

spyOn($,'ajax').and.returnValue(123);

在测试之前设置beforeEach和afterEach方法

beforeEach(function() {
  jasmine.Ajax.install();
  jasmine.Ajax.stubRequest('YOUR_URL_HERE').andReturn({
    responseText: 'YOUR_RAW_STUBbed_DATA_HERE'
  });
});

afterEach(function() {
  jasmine.Ajax.uninstall();
});

it('My Ajax Test',function() {
  // . . . code that makes an ajax request . . .
});

然后it测试将按预期执行其ajax请求.

请注意,这使您的ajax调用基本上同步但立即.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐