我想测试一个包含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] 举报,一经查实,本站将立刻删除。