gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:37:44 24 4
gpt4 key购买 nike

我们有一个我们称之为 CORShttpService 的东西,它基本上是 $http 服务的包装器,但封装了我们需要的一些 CORS 功能。我现在正在为注入(inject)了 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 的调用,但我不确定该怎么做。我正在使用 Jasmine,它的 spyOn 函数需要一个对象来模拟对象上的函数。我的 CORShttpService 没有附加到任何对象,所以我不知道如何模拟它。是的,我可以使用 $httpBackend 来模拟最终在 CORShttpService 中设置的请求,但我不希望它首先进入该服务。我想隔离单元测试并简单地模拟外部调用。有什么方法可以模拟这个只是一个函数的服务吗?

最佳答案

随着我进一步思考,$httpBackend 服务确实提供了很多用于测试请求的功能。因为我的 CORShttpService 基本上是 $http 的包装器,所以我决定,如果我制作 CORShttpService 的模拟实现,我可能会获得最大的 yield 简单的 $http 实现。使用 this documentation为了帮助我,我的规范中有以下内容:

beforeEach(module(function($provide) {
$provide.provider('CORShttpService', function() {
this.$get = function($http) {
return $http;
};
});
}));

因此,我的任何需要注入(inject) CORShttpService 的服务现在基本上只注入(inject)了 $http,这样我就可以使用所有的 $httpBackend 功能,而不用担心 CORShttpService 本身的额外功能。

这适用于我的具体情况,但就模拟服务的一般解决方案而言,它只是一个函数,同样的事情可能可以用 jasmine.createSpy 来完成,如 zbynour 中提到的回答。像这样的东西:

beforeEach(module(function($provide) {
$provide.provider('MyService', function() {
this.$get = function() {
return jasmine.createSpy("myService");
};
});
}));

关于javascript - 您如何模拟作为函数的 Angular 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com