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.

22
demandé sur Chen-Tsu Lin 2014-02-10 18:56:53

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.

35
répondu Bastian Voigt 2014-09-10 12:19:30

Injectez vos dépendances

beforeEach(function(){
   angular.module('ui.bootstrap',[]);
});
2
répondu ndurgaprasad 2016-09-01 11:22:17

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.

1
répondu gavvel 2017-03-15 12:13:33