AngularJS控制器unit testing – 注入服务

一个关于AngularJSunit testing的希望简单的问题。 我有一个控制器使用一个简单的服务(改编自angular种子项目)

services.js:

angular.module('myApp.services', []).value('version', '0.1'); 

controllers.js:

 function MyCtrl1($s, version) { $s.version = version; } MyCtrl1.$inject = ["$scope","version"]; 

这工作很好,我的应用程序。 但是,在unit testing框架工作中,我无法创build控制器。 我不知道如何注入'版本'服务(或创build实例),并将其传递给$ controller()工厂 – 我想这就是我想要做的?! 这是裸骨的规格:

controllerSpec.js

 beforeEach(inject(function($rootScope, $controller) { scope = $rootScope.$new(); // how about version service? ctrl = $controller(MyCtrl1, {$scope: scope, /* version: <where from?> */}); })); it('Version should be 0.1 ...', function() { expect(scope.version).toBe('0.1'); }); 

运行testing工具产生: > test.sh

…失败(3.00毫秒):错误:错误:未知的提供者:versionProvider < – 版本错误:未知的提供者:versionProvider < – 版本

我已经尝试了各种各样的事情与$注射器/ $供应商和模块(),但无济于事。 我相信答案很简单,但我看不到。

只需添加beforeEach(module('myApp.services'))到您的描述块。 这将会将带有“版本”服务的服务模块加载到testing注入器中,这将使其可用于您的testing。