Test d'une AngularJS usine avec Karma (Jasmin)
Je suis aux prises avec le test d'un AngularJS usine à l'aide de Karma + Jasmin.
Je ne suis pas en mesure d'injecter de mon usine à OfficerValidationService
variable.
Ce que je fais mal?
Remarque: le fichier est chargé correctement
Usine:
'use strict';
angular.module('darthvader').factory('OfficerValidationService', [function(){
var OfficerValidationService = {};
OfficerValidationService.something = function() {
return true;
};
return OfficerValidationService;
}]);
Code:
'use strict';
(function() {
describe('OfficerValidationService Spec', function() {
var OfficerValidationService;
beforeEach(function() {
angular.module('darthvader');
});
beforeEach(module('darthvader', function($provide) {
$provide.value('OfficerValidationService', OfficerValidationService);
}));
it('is very true', inject(function(OfficerValidationService){
alert('=====' + OfficerValidationService + '=====');
var output = OfficerValidationService.something();
expect(output).toBeTruthy();
}));
});
}());
De sortie:
Running "karma:unit" (karma) task
INFO [karma]: Karma v0.12.17 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.7 (Mac OS X)]: Connected on socket yc_qTseOCArRtZLAXSTZ with id 97647403
ALERT: '=====undefined====='
PhantomJS 1.9.7 (Mac OS X) OfficerValidationService Spec is very true FAILED
TypeError: 'undefined' is not an object (evaluating 'OfficerValidationService.something')
at /Users/chuck/Desktop/sandbox/dashboard.darthvader/test/karma/unit/services/officerValidationService.js:25
at invoke (/Users/chuck/Desktop/sandbox/dashboard.darthvader/public/lib/angular/angular.js:3917)
at workFn (/Users/chuck/Desktop/sandbox/dashboard.darthvader/public/lib/angular-mocks/angular-mocks.js:2155)
undefined
PhantomJS 1.9.7 (Mac OS X): Executed 28 of 28 (1 FAILED) (0.102 secs / 0.131 secs)
OriginalL'auteur chuckfinley | 2014-07-28
Vous devez vous connecter pour publier un commentaire.
Vous devez appeler
angular.injector
:var $injector = angular.injector(['darthvader']);
au lieu debeforeEach(inject(function($injector) {});
?ÉDITÉ exemple de code. Je suppose que d'avoir une déclaration explicite de mai ont été très utiles pour comprendre d'où ça vient
OriginalL'auteur martynas
À ajouter à martynas réponse, voici une version simplifiée:
module()
est l'abréviation de angulaire.se moquer.moduleinject()
est l'abréviation de angulaire.se moquer.injecter (le même que $injecteur)OriginalL'auteur Jean-Baptiste Bouhier