测试特定服务时的自定义服务依赖注入

时间:2014-12-11 04:35:41

标签: angularjs unit-testing dependency-injection

在测试服务时,是否有办法将注入的服务覆盖为特定服务的依赖关系,而不是在解决时间覆盖所有服务?

我试图将模拟服务(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

0 个答案:

没有答案