AngularJS Jasmine test échoue: échec de l'instanciation du module
Mon application angulaire a très bien fonctionné, tout comme mes tests, en utilisant karma et jasmine, jusqu'à ce que j'ajoute une dépendance dans ui.bootstrap. Maintenant, l'application fonctionne toujours comme prévu, mais je ne peux pas faire fonctionner mes tests. C'est ce que j'ai:
App.js - dépendance ajoutée dans ui.bootstrap
angular.module('myApp', ['ngResource', 'ngRoute', 'ui.bootstrap']).config(function(...) {...});
Service.js
angular.module('myApp').service('myService', function () {})
Le Contrôleur.js
angular.module('myApp').controller('MyController', function ($scope, $http, myService) {})
Tests / main.js
describe('Controller: MyController', function () {
var MyController, scope;
// load the controller's module
beforeEach(function(){
module('myApp');
inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MyController = $controller('MyController', {
$scope:scope
});
});
});
it('should do something', function () {
expect(scope.myOptions.length).toBe(5);
});
});
Et mon test, que je lance en utilisant grunt et krama, échoue en raison à:
Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module ui.bootstrap due to:
Error: [$injector:nomod] Module 'ui.bootstrap' is not available! You either misspelled the module name or forgot
Qu'ai-je manqué? L'application fonctionne sans problème, seul le test échoue.
3 réponses
Dans karma.conf.js, Il y a une liste de fichiers que le karma charge avant l'exécution du test:
// list of files / patterns to load in the browser
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
...
]
Ajouter bootstrap de l'interface utilisateur.js-il.
Injectez vos dépendances
beforeEach(function(){
angular.module('ui.bootstrap',[]);
});
J'ai eu le même problème. Juste résolu. D'une manière ou d'une autre, mettre l'appel de fonction module(myApp); dans une fonction que vous fournissez à beforeEach() ne fonctionne pas, essayez simplement ceci:
Extraire l'appel du module dans son propre beforeEach ():
beforeEach(module('myApp'));
Et utilisez un autre beforeEach () pour la fonction que vous utilisez.