我正在创建一个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();
});