我想测试一个包含 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);
设置
beforeEach
和 afterEach
您之前的方法 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/