0

我想我和许多其他人一样在使用 AngularJS 时遇到了类似的问题。我正在修复以前的错误消息(我无法从测试描述块中调用控制器函数)并得到新的错误。

错误:[ng:areq] 参数 'fooController' 不是函数,未定义

我已经阅读了其他帖子,但仍然无法纠正。

所以我的控制器就像..

'use strict';

var app = angular.module('MyApp', ['MyAppControllers']);
var appControllers = angular.module('MyAppControllers', []);

appControllers.controller('fooController', ['$scope', function ($scope) {
function foo(param) {
    alert("foo called");
}
}]);

我的控制器规格是..

'use strict';

describe('fooController', function () {
    var $scope, $controller;

    beforeEach(inject(function ($rootScope, $controller) {
        $scope = $rootScope.$new();
        ctrl = $controller('fooController', { $scope: $scope });
    }));

    it("should write foo called", function () {
        $scope.foo();
   });
});

为什么它一直说 fooController 不是一个函数?

谢谢大家。

旧帖已编辑。请您阅读底部的帖子(我的新问题?:))

4

2 回答 2

0

出色地。我傻了。描述后我没有放。

所以我现在解决了这个问题:

'use strict';

describe('fooController', function () {
    **beforeEach(module('MyApp'))**;
    var $scope, ctrl;

    beforeEach(inject(function ($rootScope, $controller) {
        $scope = $rootScope.$new();
        ctrl = $controller('fooController', { $scope: $scope });
    }));

    it("should write foo called", function () {
        $scope.foo("aa");
    });
});

和控制器..

'use strict';

var app = angular.module('MyApp', ['MyAppControllers']);

var appControllers = angular.module('MyAppControllers', []);

appControllers.controller('fooController', ['$scope', function ($scope) {
    function foo(param) {
        alert("foo called");
    }
}]);

如果可以的话,我现在想问一下我原来的问题。

问题是从控制器规范的测试块中看不到函数 foo TypeError: undefined is not a function

我看到一个帖子说函数是私有的,应该把函数变成 l

$scope.foo = function(param){alert("foo");};

但是 'use strict' 禁止像上面那样转动功能。

我想知道其他人是如何解决这个问题的?

再次感谢你。

于 2014-09-16T07:21:25.207 回答
0

更改控制器

appControllers.controller('fooController', ['$scope', function ($scope) {

//add your function within scope
$scope.foo = function(){
 alert("foo called");
}
}]);
于 2014-09-16T06:22:24.463 回答