我的角色服务看起来像
function userService() {
// A library provide methods that not used $http service and not $.ajax either
this.lib = theLib;
// This one will invoke "api/v1/user"
this.getAllUser = function () {
return lib.getAll();
}
}
如何在
下测试这些功能it('should return all user', function () {
// How can I mock the returned data without using $http
userService.getAllUser();
})
如果它使用$ http或$ ajax代替我可以很容易,我可以模拟使用$httpBackend
或模拟ajax的返回。还有另一种模仿theLib
的方法,但它里面有很多方法,但我不认为这是个好主意。在这种情况下有任何建议吗?
答案 0 :(得分:0)
在Jasmine 2.0中,引入了一个用于测试ajax的新API。
Here是
的链接你可以做这样的事情,在每次测试之前设置stib ajax并在每次测试之后将其卸载,你可以参考上面的链接获取更多信息
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 . . .
})
对于XHR请求,您可以尝试这样的
beforeEach(function() {
// spyOn(XMLHttpRequest.prototype, 'open').andCallThrough(); // Jasmine 1.x
spyOn(XMLHttpRequest.prototype, 'open').and.callThrough(); // Jasmine 2.x
spyOn(XMLHttpRequest.prototype, 'send');
});
it("should return all user", function() {
userService.getAllUser();
expect(XMLHttpRequest.prototype.open).toHaveBeenCalled();
});