茉莉花测试来测试控制器是否被定义

Jasmine test to test if the controller is defined

angular 的 Jasmine 测试新手。我正在尝试测试我定义的控制器是否已定义,但我收到错误提示 Expected undefined to be defined. 这是我的主要代码:

// controller logic MatchController.js
(function () {
'use strict';

angular.module('app.match')
        .controller('MatchController', MatchController);


MatchController.$inject = ['APP_CONFIG', '$authUser', '$http', '$rootScope', '$state', '$stateParams', 'SearchService', 'ConfirmMatchService', 'MusicOpsService', 'ContentOpsService', 'MatchstickService', 'MatchService', 'Restangular'];
function MatchController(APP_CONFIG, $authUser, $http, $rootScope, $state, $stateParams, searchService, confirmMatchService, musicOpsService, contentOpsService, matchstickService, matchService, Restangular) {

    var vm = this;
 .
 .
 .
   }
})();

这是测试文件

// MatchController.spec.js
(function(){
'use strict';
describe('Match Controller Tests', function(){

    var module, MatchTestController;

    beforeEach(function() {
        module = angular.module('app.match');
    });

    beforeEach(inject(function ($controller) {

        MatchTestController = $controller('MatchController', {});
    }));

    describe("Match controller to be defined", function() {

        it("should be created successfully", function () {
            expect(MatchTestController).toBeDefined();
        });
    });

});

})();

我一直收到错误消息:

TypeError: 'undefined' is not a function (evaluating 'angular.controller('MatchController')')
undefined
    at /Users/rgoti/match-ui/match-ui/public/src/app/match/match.controller.spec.js:16
    at invoke (/Users/rgoti/match-ui/match-ui/public/bower_components/angular/angular.js:4219)
    at workFn (/Users/rgoti/match-ui/match-ui/public/bower_components/angular-mocks/angular-mocks.js:2475)
Expected undefined to be defined.
    at /Users/rgoti/match-ui/match-ui/public/src/app/match/match.controller.spec.js:22

不确定我在这里做错了什么。

你应该先在控制器中注入所有的依赖,然后再模拟它。

试试这个:

// MatchController.spec.js
(function(){
'use strict';
describe('controller: MatchController', function(){

    var module, MatchController, APP_CONFIG, $authUser, $http, $rootScope, $state, $stateParams, SearchService, ConfirmMatchService, MusicOpsService, ContentOpsService, MatchstickService, MatchService, Restangular;

    beforeEach(function() {
        module = angular.module('app.match');
    });

    beforeEach(inject(function ($controller, _APP_CONFIG_, _$authUser_, _$http_, _$rootScope_, _$state_, _$stateParams_, _SearchService_, _ConfirmMatchService_, _MusicOpsService_, _ContentOpsService_, _MatchstickService_, _MatchService_, _Restangular_) {

        APP_CONFIG = _APP_CONFIG_;
        $authUser = _$authUser_;
        $http = _$http_;
        $rootScope = _$rootScope_;
        $state = _$state_;
        $stateParams = _$stateParams_;
        SearchService = _SearchService_;
        ConfirmMatchService = _ConfirmMatchService_;
        MusicOpsService = _MusicOpsService_;
        ContentOpsService = _ContentOpsService_;
        MatchstickService = _MatchstickService_;
        MatchService = _MatchService_;
        Restangular = _Restangular_;

        MatchController = $controller('MatchController', {
            APP_CONFIG: _APP_CONFIG_,
            $authUser: _$authUser_,
            $http: _$http_,
            $rootScope: _$rootScope_,
            $state: _$state_,
            $stateParams: _$stateParams_,
            SearchService: _SearchService_,
            ConfirmMatchService: _ConfirmMatchService_,
            MusicOpsService: _MusicOpsService_,
            ContentOpsService: _ContentOpsService_,
            MatchstickService: _MatchstickService_,
            MatchService: _MatchService_,
            Restangular: _Restangular_
        });


    }));

    describe("Match controller to be defined", function() {

        it("should be created successfully", function () {
            expect(MatchController).toBeDefined();
        });

    });

});

})();