Angular mock 无法实现我的模块依赖项

我想测试控制器 Angular 对于我的申请
fooApp

, 定义如下:


var fooApp = angular.module/'fooApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]/;
...


控制器,
MainCtrl

决定:


"use strict";

fooApp.controller/'MainCtrl', function /$scope, $rootScope, fooService/ {
...
}


因此,我测试了几种方法来创建一个测试,例如这一点:


'use strict';

describe/'MainController test', function // {

var scope;
var controller;

beforeEach/function // {
angular.mock.module/'ngRoute', []/;
angular.mock.module/'ngAnimate', []/;
angular.mock.module/'hmTouchEvents', []/;
angular.module/'cwfApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]/;

angular.mock.inject/function /$rootScope, $controller/ {
scope = $rootScope.$new//;
controller = $controller/'MainCtrl', {
$scope: scope
}/;
}/;
}/;

it/'should display a list', function // {
console.log/'-------------- Run Test 1 | ' + scope/;
expect/scope.currentStep/.toBe/1/;
}/;

}/;


以下是结果:


Error: [$injector:modulerr] [url=http://errors.angularjs.org/1.2.16-build.64+sha.245de33/]http://errors.angularjs.org/1. ... de33/[/url]$injector/modulerr?p0=undefined&p1=Error%3A%20%5Bng%3Aareq%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.16-build.64%2Bsha.245de33%2Fng%2Fareq%3Fp0%3Dfn%26p1%3Dnot%2520a%2520function%252C%2520got%2520undefined%0A%20%20%20%20at%20Error%20/%3Canonymous%3E/%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A6%3A471%0A%20%20%20%20at%20wb%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A18%3A360/%0A%20%20%20%20at%20Qa%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A18%3A447/%0A%20%20%20%20at%20nc%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A31%3A191/%0A%20%20%20%20at%20Object.d%20%5Bas%20invoke%5D%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A33%3A176/%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A254%0A%20%20%20%20at%20Array.forEach%20/native/%0A%20%20%20%20at%20r%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298/%0A%20%20%20%20at%20e%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9/
at Error /<anonymous>/
at d:/dev/foo/app/bower_components/angular/angular.min.js:6:471
at d:/dev/foo/app/bower_components/angular/angular.min.js:32:400
at Array.forEach /native/
at r /d:/dev/foo/app/bower_components/angular/angular.min.js:7:298/
at e /d:/dev/foo/app/bower_components/angular/angular.min.js:32:9/
at Object.$b [as injector] /d:/dev/foo/app/bower_components/angular/angular.min.js:35:98/
at workFn /d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2142:52/
at Object.window.inject.angular.mock.inject [as inject] /d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2133:37/
at null.<anonymous> /d:/dev/foo/test/jasmine/todo.test.js:15:22/
TypeError: Cannot read property 'currentStep' of undefined
at null.<anonymous> /d:/dev/foo/test/jasmine/todo.test.js:25:21/
Chrome 31.0.1650 /Windows 7/: Executed 1 of 1 /1 FAILED/ ERROR /0.023 secs / 0.015 secs/


我也有测试
beforeEach/angular.mock.module/'cwfApp'//;

/而不是第一个
beforeEach

在以前的代码中/, 但误差几乎相同。

至于我的文件 karma.conf.js, 我安装了这个文件列表:


files: [
'app/bower_components/angular/angular.min.js',
'app/bower_components/angular-route/angular-route.min.js',
'app/bower_components/hammerjs/hammer.min.js',
'app/bower_components/angular-hammer/angular-hammer.js',
'app/bower_components/angular-mocks/angular-mocks.js',

'app/js/foo-application.js',
'app/js/foo-controllers.js',
'app/js/foo-services.js',
'app/js/foo-router.js',

'test/jasmine/*.js'
],


注射,似乎,失败了,但我真的不明白什么是缺少的或者在我的配置中缺少。 Stacktrace 以上并没有给出很多解释......

有任何想法吗?

我用 Angular 1.2.8.

尊敬

编辑,提供代码 @Engineer:


beforeEach/angular.mock.module/'fooApp'//;

beforeEach/angular.mock.inject/function/$rootScope, $controller/ {
scope = $rootScope.$new//;
controller = $controller/'MainCtrl', {
$scope: scope
}/;
}//;

it/'should display a list', function // {
console.log/'-------------- Run Test 1 | ' + scope/;
expect/scope.currentStep/.toBe/1/;
}/;


错误几乎是相同的:


Error: [$injector:modulerr] [url=http://errors.angularjs.org/1.2.16-build.64+sha.245de33/]http://errors.angularjs.org/1. ... de33/[/url]$injector/modulerr?p0=cwfApp&amp;p1=Error%3A%20%5B%24injector%3Amodulerr%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.16-build.64%2Bsha.245de33%2F%24injector%2Fmodulerr%3Fp0%3DngAnimate%26p1%3DError%253A%2520%255B%2524injector%253Anomod%255D%2520http%253A%252F%252Ferrors.angularjs.org%252F1.2.16-build.64%252Bsha.245de33%252F%2524injector%252Fnomod%253Fp0%253DngAnimate%250A%2520%2520%2520%2520at%2520Error%2520/%253Canonymous%253E/%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A6%253A471%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A20%253A260%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A21%253A262%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A69%250A%2520%2520%2520%2520at%2520Array.forEach%2520/native/%250A%2520%2520%2520%2520at%2520r%2520/http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A7%253A298/%250A%2520%2520%2520%2520at%2520e%2520/http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A9/%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A86%250A%2520%2520%2520%2520at%2520Array.forEach%2520/native/%0A%20%20%20%20at%20Error%20/%3Canonymous%3E/%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A6%3A471%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A400%0A%20%20%20%20at%20Array.forEach%20/native/%0A%20%20%20%20at%20r%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298/%0A%20%20%20%20at%20e%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9/%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A86%0A%20%20%20%20at%20Array.forEach%20/native/%0A%20%20%20%20at%20r%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298/%0A%20%20%20%20at%20e%20/http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9/
at Error /<anonymous>/
at d:/dev/foo/app/bower_components/angular/angular.min.js:6:471
at d:/dev/foo/app/bower_components/angular/angular.min.js:32:400
at Array.forEach /native/
at r /d:/dev/foo/app/bower_components/angular/angular.min.js:7:298/
at e /d:/dev/foo/app/bower_components/angular/angular.min.js:32:9/
at Object.$b [as injector] /d:/dev/foo/app/bower_components/angular/angular.min.js:35:98/
at workFn /d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2142:52/
TypeError: Cannot read property 'currentStep' of undefined
at null.<anonymous> /d:/dev/foo/test/jasmine/todo.test.js:20:21/


我会尝试创造 fiddle, 重现我的问题......
</anonymous></anonymous></anonymous></anonymous></anonymous>
已邀请:

喜特乐

赞同来自:

事实上,我的问题是由一个小错误引起的
karma.conf.js

. 实际上,我的申请定义如下:


var fooApp = angular.module/'fooApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]/;


和我的
karma.conf.js

加载以下脚本:


files: [
'app/bower_components/angular/angular.min.js',
'app/bower_components/angular-route/angular-route.min.js',
'app/bower_components/hammerjs/hammer.min.js',
'app/bower_components/angular-hammer/angular-hammer.js',
'app/bower_components/angular-mocks/angular-mocks.js',

'app/js/foo-application.js',
'app/js/foo-controllers.js',
'app/js/foo-services.js',
'app/js/foo-router.js',

'test/jasmine/*.js'
], ...


但是这个模块
ngAnimate

没有装。 因此,我刚刚添加了这一行:


'app/bower_components/angular-animate/angular-animate.min.js',


它有效!

涵秋

赞同来自:

你覆盖了模块 fooApp 在测试中。

您需要下载它 Angular 在测试代​​码中如下:


angular.mock.module/'ngRoute', 'ngAnimate', 'hmTouchEvents', 'fooApp'/;

郭文康

赞同来自:

尝试这样的:


describe/'MainController test', function // {
var scope;
var controller;

beforeEach/angular.mock.module/'fooApp'//;
beforeEach/angular.mock.inject/function/$rootScope, $controller/ {
scope = $rootScope.$new//;
controller = $controller/'MainCtrl', {
$scope: scope
}/;
}/;
it/'should display a list', function // {
console.log/'-------------- Run Test 1 | ' + scope/;
expect/scope.currentStep/.toBe/1/;
}/;
}/;


事实上,如果您以其依赖项声明某些模块/例如,
angular.module/'fooApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]/

/, 然后介绍模块时/
fooApp

/ 您也无需输入依赖性模块。

要回复问题请先登录注册