jasmine angularjs testing - L'argument 'PhoneListCtrl' n'est pas une fonction, n'est pas défini
-
21-12-2019 - |
Question
Lors de l'exécution d'un test Angularjs + Jasmine + Karma, j'ai eu l'erreur suivante :
Mon script de test est :
describe('PhoneCat controllers', function() {
describe('PhoneListCtrl', function(){
it('should create "phones" model with 3 phones', inject(function($controller) {
var scope = {},
ctrl = $controller('PhoneListCtrl', { $scope: scope });
expect(scope.phones.length).toBe(3);
}));
});
});
Ce code n'est qu'une copie du tutoriel officiel d'AngularJS ici :http://code.angularjs.org/1.2.0-rc.3/docs/tutorial/step_02
Voici une partie de mon fichier karma.conf.js :
// list of files / patterns to load in the browser
files: [
'js/bower_components/angular/angular.js',
'js/bower_components/angular/ngular-mocks.js',
'js/app/controllers.js',
'test/unit/*.js'
],
L'erreur est ListeTéléphoneCtrl pas défini, mais je crois qu'il est défini et chargé dans le code ci-dessus.Selon vous, quel est le problème ?Merci!
La solution
La partie initialisation du module est manquante dans votre test unitaire.Tu devrais appeler module('phonecatApp')
avant votre premier appel inject()
.Dans ce cas, votre code de test unitaire devrait ressembler à :
describe('PhoneCat controllers', function() {
describe('PhoneListCtrl', function(){
beforeEach(function() {
module('phonecatApp'); // <= initialize module that should be tested
});
it('should create "phones" model with 3 phones', inject(function($controller) {
var scope = {},
ctrl = $controller('PhoneListCtrl', { $scope: scope });
expect(scope.phones.length).toBe(3);
}));
});
});
où phonecatApp
est le nom du module où vous avez défini votre PhoneListCtrl
manette.
Le didacticiel que vous utilisez est également obsolète, il s'agit d'une version instable d'Angular (1.2.0-rc.3).Voici une version mise à jour du même tutoriel pour la dernière version d'Angular : http://docs.angularjs.org/tutorial/step_02
Autres conseils
Cela fonctionne pour moi
describe('addCatControllerTest', function() {
describe('addCatController', function(){
beforeEach(function() {
module('app');
});
beforeEach(inject(function($controller, $rootScope){
$scope = $rootScope.$new();
}));
it('Add Cat Controller test', inject(function($controller) {
var scope = {},
ctrl = $controller('addCatController', { $scope: scope });
expect(scope.title).toBe('Add Cat');
}));
});
});