Test modulaire AngularJS w/ Jasmin & Karma
De la difficulté à obtenir de l'unité de test mis en place dans le Jasmin/Karma. J'ai un contrôleur avec une dépendance de service, et ce service a une autre dépendance de service. Je ne suis pas à organiser mes modules par type (Directives, Services, etc), mais plutôt en fonction de la mise en summaryView, etc).
Voici l'architecture:
angular.module('myApp', ['ngResource', 'myApp.base', 'myApp.layout','myApp.common']);
angular.module('myApp.base', ['myApp.common']);
angular.module('myApp.common',[]);
angular.module('myApp.layout',['myApp.common']);
Contrôleur:
angular.module('myApp.layout')
.controller('LayoutCtrl', ['$scope', '$rootScope', '$timeout', 'layoutService', 'urlService', 'BaseService',
function ($scope, $rootScope, $timeout, layoutService, urlService, BaseService) {
//controller code here
});
Service De Mise En Page:
angular.module('myApp.layout')
.service('layoutService', ['$http', '$resource', '$rootScope', '$location', '$route', 'errorHandlingService', 'utilService',
function ($http, $resource, $rootScope, $location, $route, errorHandlingService, utilService) {
//service code here
});
De ce que je comprends, si j'ai simplement inclure beforeEach(module('myApp.layout'));
, je devrais avoir accès à mon contrôleurs, des services, des filtres et des directives dans ma mise en page du module.
Au lieu de cela, le code suivant échoue:
describe('Layout Controller', function() {
var ctrl, scope, service;
beforeEach(module('myApp'));
beforeEach(module('myApp.layout'));
beforeEach(inject(function($controller, $rootScope, layoutService) {
scope = $rootScope.$new();
service = layoutService;
//Create the controller with the new scope
ctrl = $controller('LayoutCtrl', {$scope: scope, layoutService: service});
dump(scope);
}));
it('should exist', function() {
expect(ctrl).toBeDefined();
});
});
Avec cette erreur:
Chrome 26.0 (Mac) Layout Controller should exist FAILED
Error: Unknown provider: layoutServiceProvider <- layoutService
at Error (<anonymous>)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js:28:236
at Object.c [as get] (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js:26:13)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js:28:317
at c (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js:26:13)
at Object.d [as invoke] (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js:26:147)
at workFn (http://code.angularjs.org/1.0.4/angular-mocks.js:1754:20)
Error: Declaration Location
at window.jasmine.window.inject.angular.mock.inject (http://code.angularjs.org/1.0.4/angular-mocks.js:1740:25)
at null.<anonymous> (/Users/scottsilvi/svn/BARO/web/src/test/js/unit/myApp.layoutModule.js:6:14)
at /Users/scottsilvi/svn/BARO/web/src/test/js/unit/myApp.layoutModule.js:1:1
Expected undefined to be defined.
Error: Expected undefined to be defined.
at null.<anonymous> (/Users/scottsilvi/svn/BARO/web/src/test/js/unit/myApp.layoutModule.js:15:16)
Chrome 26.0 (Mac): Executed 10 of 10 (1 FAILED) (0.36 secs / 0.014 secs)
Pensées?
Êtes-vous sûr que tous les fichiers sont en cours de chargement et sont chargés dans le bon ordre?
oui, cela s'est avéré être le problème. Certaines dépendances dans myApp module n'est pas chargé. Dès que j'ai chargé tous, le début des épreuves de travail. Aller de l'avant et déposer une réponse et je vais le marquer comme correcte. Thx.
oui, cela s'est avéré être le problème. Certaines dépendances dans myApp module n'est pas chargé. Dès que j'ai chargé tous, le début des épreuves de travail. Aller de l'avant et déposer une réponse et je vais le marquer comme correcte. Thx.
OriginalL'auteur Scott Silvi | 2013-05-18
Vous devez vous connecter pour publier un commentaire.
Souvent un Inconnu Fournisseur d'erreur provient de fichiers n'étant pas chargée ou chargé dans un ordre incorrect. Vérifier les fichiers qui sont présents, tandis que vos tests sont en cours d'exécution.
comment détecter les fichiers qui sont présents lorsque les tests sont en cours d'exécution?
Exécuter le karma avec le logLevel DEBUG
OriginalL'auteur Jmr
Ce genre d'erreurs se produisent généralement dus à des erreurs de déclaration des fichiers à l'intérieur de karma.config.js fichier. Pour l'installation de karma-jasmin tous les fichiers à l'intérieur de
file:[]
bloc de karma.config.js fichier doit être dans l'ordre dans lequel ils devraient être chargés. Module principal est d'avoir de l'injection de dépendances de n'importe quel service puis de charger le service d'abord et ensuite du module principal.OriginalL'auteur samyak bhalerao