我想测试一个功能,其中包括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);
});
我尝试了间谍,但我猜我在错误地使用它们:
spyOn($, 'ajax' ).and.returnValue(123);
我希望每次发出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
测试将按预期执行其ajax请求。
注意,这使您的ajax调用本质上是同步的,但立即进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句