Mam następującą złożoną konfigurację angularjs:
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
}]);
Teraz piszę skrzynkę testową jaśminu dla kontrolera c1, oto mój przykładowy kod kontrolera
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();
});
});
Ale z jakiegoś powodu test kończy się niepowodzeniem i nie pojawia się żaden komunikat o błędzie. Jedyny komunikat, który pokazuje program uruchamiający Firefoksa, NIE działa z następującymi plikami:
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
Moje pytania to:
Czy tego rodzaju konfiguracja angularjs jest zalecana do testowania, a jeśli tak, to co robię źle lub brakuje mi, co powoduje niepowodzenie testu?
Jak mogę włączyć szczegółowe logowanie błędów w karmie?
Odpowiedzi:
1 dla odpowiedzi № 1Pierwszą rzeczą, którą popełniłeś źle, jest: Nazwa zależności, ponieważ powinny to być ciągi zamiast zmiennych.
Zamiast więc:
angular.module("a",["b","c"]).controller("c1", [$scope, bservice, cservice, function($scope,bservice,cservice){
// c1 controller code
}]);
Powinno być:
angular.module("a",["b","c"]).controller("c1", ["$scope", "bservice", "cservice", function($scope,bservice,cservice){
// c1 controller code
}]);
Następną rzeczą, którą powinieneś zrobić, to przetestować każdą usługę i kontroler osobno, kpiąc z wymaganej podczas testu poszczególnych usług i kontrolerów.
Tutaj jest CodePen na przykład. Jeśli wyśmiejesz moduł i będziesz go poprawnie serwisować, będzie działał.