当使用参数实例化时,AngularJS Jasmine错误“控制器不是函数”

当使用参数实例化时,AngularJS Jasmine错误“控制器不是函数”,angularjs,jasmine,angular-mock,Angularjs,Jasmine,Angular Mock,我已经做angularJS有一段时间了,现在没有测试,但我想做得很好!我有一个这样定义的控制器 (function () { 'use strict'; angular.module('app') .controller('CarehomeListCtrl', ['$scope', 'carehomesDataService', carehomeListCtrl]); function carehomeListCtrl($scope, carehomesDataService) {

我已经做angularJS有一段时间了,现在没有测试,但我想做得很好!我有一个这样定义的控制器

(function () {
'use strict';

angular.module('app')
    .controller('CarehomeListCtrl', ['$scope', 'carehomesDataService', carehomeListCtrl]);


function carehomeListCtrl($scope, carehomesDataService) {
    var vm = this;
    vm.carehomeCollection = [];

    vm.activate = activate;


    function activate() {
        vm.carehomeCollection = carehomesDataService.getAllCarehomes();
    }

    activate();
}
})();
然后是我的规格

   describe("Carehomes tests", function () {
    var $scopeConstructor, $controllerConstructor;

    beforeEach(module('app'));

    beforeEach(inject(function ($controller, $rootScope) {

        $controllerConstructor = $controller;
        $scopeConstructor = $rootScope;
    }));

    describe("CarehomeListCtrl", function () {
        var ctrl, dataService, scope;
        function createController() {
            return $controllerConstructor('CarehomeListCtrl', {
                $scope: scope,
                carehomesDataService: dataService
            });

        }
        beforeEach(inject(function ($injector) {
            scope = $scopeConstructor.$new();
            dataService =$injector.get('carehomesDataService') ;
        }));

        it("should have a carehomesCollection array", function () {
            ctrl = createController();
            expect(ctrl.carehomesCollection).not.toBeNull();
        });

        it("should have 3 items in carehomesCollection array when load is called", function () {
            ctrl = createController();
            expect(ctrl.carehomeCollection.length).toBe(3);
        });
    });


});
这里的问题是,每当我使用任何参数调用控制器时,实例化控制器的调用都会失败,无论是空对象{}还是$scope:scope},因此我知道问题不在CareHomeDataService

结果StackTrace:错误:[ng:areq]参数“CarehomeListCtrl”不正确 函数,未定义

但是,如果我像$controllerConstructor'CarehomeListCtrl'这样实例化该控制器;如果没有参数,它将被实例化。我被难住了

CareHomeDataService是我编写的一个定制服务,但是它自己的测试通过了,并且它被正确地注入到应用程序中的控制器中

任何帮助都将不胜感激


注意:我不太同意将控制器上的属性定义为视图模型而不是$scope,但我遵循Jesse Liberty的pluralsight课程,他就是这样做的……另外,注入scope现在不太管用,这很烦人。提前谢谢。

您能在这里复制一下吗?您好@tasseKATT,看起来您已经在plunkr中复制了它,而且它似乎有效!但我在屏幕上看到的只是测试失败,我不知道为什么,我会从plunkr复制代码,以防万一我遗漏了什么,我会回来找你。谢谢,也许有人能给我解释一下karma是如何工作的,因为我已经离开代码一整天了,回来退出karma,关闭命令行窗口,重新启动它,再次运行测试,这次测试通过了。我对此感到不太舒服,因为我不知道是什么原因导致了这个问题,因此我也不知道它是否会再次发生……但至少现在我可以继续我的工作。感谢@tasseKATTI终于找到了答案,虽然我不知道为什么,但我正在使用Karma,这是为了观看我的js文件并重新运行测试。如果我修改了规范文件,它运行正常,但每当我修改控制器时,我必须杀死karma并重新启动它,否则我会出现上述错误。我不知道这是为什么,但至少现在我知道了问题的原因。啊,很高兴你找到了原因。