加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Jasmine 2.0如何处理ajax请求

发布时间:2020-12-16 02:46:09 所属栏目:百科 来源:网络整理
导读:我想测试一个包含ajax请求的函数.测试应该等待ajax-request成功/失败.运行测试不起作用,因为它现在不会等待. 这个我想测试一下: this.requestServerBoxId = function(){ //ajax-request $.ajax({ url: this.host_addr+"/?getid="+this.name,type: 'POST',da
我想测试一个包含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调用基本上同步但立即.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读