web-dev-qa-db-fra.com

Échec du test AngularJS Jasmine: échec de l'instanciation du module

Mon angular fonctionnait très bien, tout comme mes tests, en utilisant le karma et le jasmin, jusqu'à ce que j'ajoute une dépendance dans ui.bootstrap. Maintenant, l'application fonctionne toujours comme prévu, mais je ne parviens pas à exécuter mes tests. Voici ce que j'ai:

app.js - ajout d'une dépendance dans i.bootstrap

angular.module('myApp', ['ngResource', 'ngRoute', 'ui.bootstrap']).config(function(...) {...});

service.js

angular.module('myApp').service('myService', function () {})

controller.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 de:

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'est-ce que j'ai raté? L'application fonctionne sans problème, seul le test échoue.

22
Haji

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',
  ...
]

Ajoutez-y bootstrap-ui.js.

35
Bastian Voigt

Injectez vos dépendances

beforeEach(function(){
   angular.module('ui.bootstrap',[]);
});
2
ndurgaprasad

J'ai eu le même problème. Je viens de le résoudre. D'une manière ou d'une autre, placer l'appel de fonction module(myApp); dans une fonction que vous fournissez à beforeEach() ne fonctionne pas, essayez simplement ceci:

Extrayez l'appel du module dans son propre beforeEach ():

beforeEach(module('myApp'));

Et utilisez un autre beforeEach () pour la fonction que vous utilisez.

1
gavvel