我们有一个所谓的CORShttpService
,这基本上是一个包装$http
service,但是封装了一些我们需要的CORS功能。我现在正在为具有以下功能的服务编写一些测试CORShttpService
注入其中。该服务的代码如下:
CORShttpService({method: requestMethod, url: getUrl(path), data: data}).
success(function(data, status, headers) {
//do success stuff
}).
error(function(data, status, headers) {
//do error stuff
});
我想模拟呼叫CORShttpService
,但我不确定如何去做。我正在使用茉莉花,它spyOn
函数需要一个对象来模拟该对象上的函数。我的CORShttpService
没有附加到任何对象,所以我不知道如何去模拟它。是的,我可以用$httpBackend
模拟最终在中设置的请求CORShttpService
,但我一开始就不希望它进入该服务。我想隔离单元测试并简单地模拟外部调用。有什么方法可以模拟这个只是一个功能的服务吗?
当我更多地思考这个问题时,$httpBackend
服务确实提供了很多用于测试请求的功能。作为我的CORShttpService
基本上是一个包装$http
,我决定如果我模拟实现的话,我可能会得到最大的回报CORShttpService
简单的$http
执行。使用本文档 http://docs.angularjs.org/api/AUTO.%24provide为了帮助我,我的规范中有以下内容:
beforeEach(module(function($provide) {
$provide.provider('CORShttpService', function() {
this.$get = function($http) {
return $http;
};
});
}));
所以,我的任何服务想要CORShttpService
注入,现在基本上只有$http
注入,从而允许我使用所有$httpBackend
功能,而无需担心中发现的额外功能CORShttpService
itself.
这适用于我的具体情况,但就模拟服务的通用解决方案而言,这只是一个函数,同样的事情可能可以用jasmine.createSpy
正如 zbynour 的回答中提到的。就像是:
beforeEach(module(function($provide) {
$provide.provider('MyService', function() {
this.$get = function() {
return jasmine.createSpy("myService");
};
});
}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)