如何模拟作为函数的 Angular 服务?

2024-03-24

我们有一个所谓的CORShttpService,这基本上是一个包装$httpservice,但是封装了一些我们需要的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(使用前将#替换为@)

如何模拟作为函数的 Angular 服务? 的相关文章

随机推荐