ajax - Jasmine 2.0 如何处理ajax请求

标签 ajax jasmine

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

这是我想测试的:

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);
});

我尝试过 spy ,但我想我用错了:
 spyOn($, 'ajax' ).and.returnValue(123);

我希望这个 spy 每次发出 ajax 请求时都返回 123。但它不起作用。

最佳答案

在 Jasmine 2.0 中,有一个全新的 API 用于测试 ajax(以及几乎所有其他内容)。

代替:

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

设置 beforeEachafterEach您之前的方法 it测试:
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然后 test 将按预期执行其 ajax 请求。

请注意,这使您的 ajax 调用本质上是同步但立即的。

关于ajax - Jasmine 2.0 如何处理ajax请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22245991/

相关文章:

javascript - 如何对另一个函数内的函数被调用进行单元测试?

asp.net - 如何为现有 Web 应用程序创建功能/UI 测试

angular - Bootstrap 模态 DOM 元素在 Angular 单元测试中不可用

javascript - jQuery ajax 未捕获类型错误

jquery - 将来自 AJAX 请求的数据保存在变量中 (jQuery)

jquery - 为什么我的 jQuery jEditable、就地编辑回调不起作用?

javascript - 如何在 Scalajs 中使用 Ajax 上传文件

javascript - 在另一个项目中使用 marble testing rxjs5 方法

angular - Jasmine - 无法读取未定义的属性 'controls' - Angular 6

jquery - ajax调用成功后如何使用数据