在测试服务时,是否有办法将注入的服务覆盖为特定服务的依赖关系,而不是在解决时间覆盖所有服务?
我试图将模拟服务(MockChild
)注入另一个服务(Parent
)作为依赖项,并让模拟服务依赖于原始服务({{1} })。类似的东西:
Child
模拟服务将在多个位置使用,因此我想将其从Parent >> MockChild >> Child
服务中删除并将其放在自己的文件中。
我遇到的问题是我无法通过以下方式将Parent
服务注入MockChild
服务:
Parent
然后使用var $rootScope, MockChild, Parent;
beforeEach(inject(function(_$rootScope_, _MockChild_, _Parent_) {
$rootScope = _$rootScope_;
MockChild = _Child_;
Parent = _Parent_;
}));
表示依赖注入在解析$provide
时应使用MockChild
,通过:
Child
我可以理解,这很可能是因为在调用beforeEach(module(function($provide) {
$provide.value('Child', MockChild);
}));
时,应用程序范围内的注入规则已经完成,但对我来说问题是我需要访问inject(...)
在Child
内。
在我看来,当使用MockChild
服务测试控制器时,实现了本地覆盖,为您需要注入的服务提供显式覆盖参数。使用虚构$controller
服务的示例如下所示:
$service
我的beforeEach(inject(function($service, MockChild) {
Parent = $service('Parent', {
Child: MockChild
});
});
服务定义如下:
MockChild
我的angular.module('myApp')
.service('MockChild', ['$q', 'Child', function($q, Child) {
var _children = [
new Child(),
new Child(),
new Child()
];
return {
all: function() {
return $q(function(success, error) {
if(success) {
success(_children);
}
});
}
};
}]);
服务看起来像这样:
Parent