Ionic - Argument不是一个函数,在使用karma进行测试时未定义

时间:2016-04-11 23:54:46

标签: angularjs ionic-framework tdd karma-runner karma-jasmine

我正在创建一个Ionic应用程序,我想用Karma测试它,但是当我运行Karma时我遇到了这个错误:

  

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

我已检查控制器文件是否已添加到karma conf中,但它是:

module.exports = function (config) {
    config.set({
        basePath: '../',
        frameworks: ['jasmine'],

        files: [
            'www/lib/ionic/js/ionic.bundle.js',
            'www/lib/ngCordova/dist/ng-cordova-mocks.js',
            'www/lib/angular-mocks/angular-mocks.js',
            'www/js/app.js',
            'www/js/app/**/*.js',
            'www/js/components/**/*.{js,html}',
            'test/**/!(karma.conf).js'
        ],

        exclude: [],
        preprocessors: {},
        reporters: ['progress'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: false,
        browsers: ['PhantomJS'],
        singleRun: false,
        browserDisconnectTimeout: 10000, // default 2000
        browserDisconnectTolerance: 1, // default 0
        browserNoActivityTimeout: 4 * 60 * 1000 //default 10000
    })
};

这是我正在尝试运行的规范:

'use strict';
describe('Controller Tests', function () {
    var $scope, $rootScope, LocalizacaoService, EstadosComEstabelecimentos;
    var estadosRetornados = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}];
    var createController;

    describe('SelecaoLocalizacaoController aff', function () {

        beforeEach(inject(function ($injector) {
            $rootScope = $injector.get('$rootScope');
            $scope = $rootScope.$new();

            LocalizacaoService = {
                getCidadeAtual: function (success, error) {
                    success({
                        idEstado: 56,
                        idCidade: 651
                    });
                }
            };

            EstadosComEstabelecimentos = {
                get: function () {
                    return {
                        then: function (callback) {
                            return callback({
                                data: estadosRetornados
                            });
                        }
                    }
                }
            };

            var ionicModal = {
                fromTemplateUrl: function () {
                    return {
                        then: function () {
                        }
                    };
                }
            };

            var locals = {
                '$scope': $scope,
                '$rootScope': $rootScope,
                '$ionicModal': ionicModal,
                'LocalizacaoService': LocalizacaoService,
                'EstadosComEstabelecimentos': EstadosComEstabelecimentos
            };
            createController = function () {
                $injector.get('$controller')("SelecaoLocalizacaoController", locals);
            };
            createController();
        }));

        describe('inicialização', function () {
            it('deve carregar todos os estados com estabelecimentos ativos cadastrados', function () {
                expect($scope.estados).not.toBe(undefined);
                expect($scope.estados.length).toBe(5);
                expect($scope.estados[0]).toEqual({id: 1});
                expect($scope.estados[1]).toEqual({id: 2});
                expect($scope.estados[2]).toEqual({id: 3});
                expect($scope.estados[3]).toEqual({id: 4});
                expect($scope.estados[4]).toEqual({id: 5});
            });

            it('deve selecionar estado e cidade a partir das coordenadas do GPS', function () {
                expect($scope.posicao.idEstado).toBe(56);
                expect($scope.posicao.idCidade).toBe(651);
                expect($scope.exibirMensagemNaoEncontrado).toBeFalsy();
            });
        });
    });
});

最后,这是我正在测试的控制器:

'use strict';

angular.module('cervejeirosApp')
.controller('SelecaoLocalizacaoController', function ($scope, $ionicModal, EstadosComEstabelecimentos, LocalizacaoService) {

    $scope.loadAll = function () {
        EstadosComEstabelecimentos.get()
            .then(function (result) {
                $scope.estados = result.data;
            });
        LocalizacaoService.getCidadeAtual(function (result) {
            if (angular.isDefined(result) && result != null)
                $scope.posicao = result;
            else {
                $scope.posicao = {idEstado: null, idCidade: null};
                $scope.exibirMensagemNaoEncontrado = true;
            }
        });
        $ionicModal.fromTemplateUrl('js/app/localizacao/modal-selecao-estado.html', {
            scope: $scope,
            animation: 'slide-in-up'
        }).then(function(modal) {
            $scope.modalEstado = modal;
        });
    };

    $scope.selecionarEstado=function(){
        $scope.modalEstado.show();
    };

    $scope.selecionouEstado=function(estado){
        $scope.posicao.idEstado=estado.id;
        $scope.modalEstado.hide();
    };

    $scope.loadAll();

});

0 个答案:

没有答案