1

出于这个问题的目的,我有一个 Angular JS 控制器定义如下:

function TestController($scope) {
  $scope.name = 'eric';
}

使用我的正常节点/业力/茉莉花设置(在 phantom、chrome、canary、firefox 和 safari 中测试)可以很好地测试:

describe('TestSquaredController', function(){
  beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
    scope = $rootScope.$new();
    ctrl = $controller('TestController', {$scope: scope});
  }));
  it('should be called eric', function() {
    expect(scope.name).toEqual('eric');
  });
});

但是,当我使用 angular module.controller 注册控制器的方式时,Error: Argument 'TestController' is not a function, got undefined在使用相同的测试时会出现错误。

IE。

app.module('testAngularApp')
  .controller('TestController', function($scope) {
    $scope.test = 'eric';
  });

我似乎找不到与此相关的任何内容!在我的测试中我还应该初始化/做些什么吗?

4

2 回答 2

3

您以完全相同的方式测试它们。确保您通过ngMock 模块中的模块功能在测试中使用控制器加载模块。像这样的东西:

beforeEach(module('testAngularApp'));
于 2013-06-04T16:20:53.040 回答
0

我遇到了同样的问题,在运行我们的 Jasmine 规范时遇到了同样的错误。

首先,我们尝试按照上面的答案更改包含的顺序,但这并没有解决它。

然后我们发现我们已经在应用程序的多个地方初始化了我们的模块,使用初始化器

var app = angular.module('testAngularApp', [])

在我们所有的控制器 js 文件的顶部,而我们只需要初始化一次,然后将它包含在我们的控制器 js 文件的顶部

var app = angular.module('testAngularApp)

也许你也做过类似的事情?或者在第一种情况下未能正确初始化它?只是一个想法,以防你没有设法解决你的问题。

于 2013-09-16T10:50:06.303 回答