/ / Erro Karma-Jasmine - angularjs, karma-jasmine

Erro de Karma-Jasmim - angularjs, karma-jasmim

Tenho a seguinte configuração angularjs complexa:

angular.module("a",["b","c"])
.controller("c1", ["$scope", "bservice", "cservice", function($scope,bservice,cservice){

// c1 controller code
}]);

angular.module("b",["d","e"])
.service("bservice", ["$scope", "dservice", "eservice", function($scope,dservice,eservice){

// bservice code
}]);

angular.module("c",["f","g"])
.service("cservice", ["$scope", "fservice", "gservice", function($scope,fservice,gservice){

// cservice code
}]);

angular.module("d",[])
.service("dservice", ["$scope", function($scope){

// dservice code
}]);

angular.module("e",[])
.service("eservice", ["$scope", function($scope){

// eservice code
}]);

angular.module("f",[])
.service("fservice", ["$scope", function($scope){

// fservice code
}]);

angular.module("g",[])
.service("gservice", ["$scope", function($scope){

// gservice code
}]);

Agora estou escrevendo o caso de teste do Jasmine para o controlador c1. Aqui está o meu código de controlador de amostra

describe("c1 controller", function(){
var scope, controller;
var bservice, cservice;

beforeEach( module("a") );

beforeEach(inject(function(_$controller_, _$rootScope_, _bservice_, _cservice_) {
scope = _$rootScope_.$new();

controller = _$controller_("c1", {
$scope: scope,
bservice: _bservice_,
cservice: _cservice_
});

}));

it("scope should be defined", function() {
expect(scope).toBeDefined();
});

});

Mas, por algum motivo, o teste está falhando e não estou recebendo nenhuma mensagem de erro. A única mensagem que o iniciador do Firefox mostra é FALHA com os seguintes arquivos:

minErr/<@ui-build/node_modules/angular/angular.js:68:12
loadModules/<@ui-build/node_modules/angular/angular.js:4779:15
forEach@ui-build/node_modules/angular/angular.js:357:11
loadModules@ui-build/node_modules/angular/angular.js:4740:5
createInjector@ui-build/node_modules/angular/angular.js:4662:19
WorkFn@ui-build/node_modules/angular-mocks/angular-mocks.js:3160:44
[3]</ContextKarma/this.loaded@http://localhost:9876/context.js:151:7

Então minhas perguntas são:

Esse tipo de configuração do angularjs é aconselhável para teste e, se sim, o que estou fazendo de errado ou perdendo que está causando a falha do teste?

Como posso habilitar o log de erros detalhados no karma?

Respostas:

1 para resposta № 1

A primeira coisa que você fez de errado é: O nome das dependências, já que deveriam ser strings em vez de variáveis.

Então, ao invés de:

angular.module("a",["b","c"]).controller("c1", [$scope, bservice, cservice, function($scope,bservice,cservice){
// c1 controller code
}]);

Deveria ser:

angular.module("a",["b","c"]).controller("c1", ["$scope", "bservice", "cservice", function($scope,bservice,cservice){
// c1 controller code
}]);

A próxima coisa que você deve fazer é testar cada serviço e controlador separadamente, simulando o necessário durante o teste de serviço e controladores individuais.

Aqui está o CodePen para o exemplo. Se você simular o módulo e o serviço corretamente, ele funcionará.