Je suis nouveau pour les tests unitaires de karma et j'ai rencontré ce problème à une application ionique simple.Karma Jasmine testing injecter ne fonctionne pas
Ceci est mon contrôleur:
angular.module('starter').controller('AccountCtrl', function ($scope) {
$scope.settings = {
enableFriends: true
};
$scope.dummyFunction = function() {
console.log("Just do nothing!");
}
});
Ceci est mon fichier de test unitaire:
describe('AccountCtrl', function() {
var scope, createController;
beforeEach(module('starter'));
console.log("0");
beforeEach(function() {
console.log("1");
})
beforeEach(inject(function ($rootScope, $controller) {
console.log("2");
scope = $rootScope.$new();
controller = $controller('AccountCtrl', {
'$scope': scope
});
}));
it('should do stuff', function() {
console.log("3");
expect("Hello!").toBeDefined();
});
});
A ce moment, quand je lance le test que j'obtiens ceci:
PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: 'WARNING: Tried to load angular more than once.'
PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: '0'
LOG: '1'
LOG: '3'
PhantomJS 2.1.1 (Mac OS X 0.0.0) AccountCtrl should do stuff FAILED
[email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:13696:24
[email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17883:12
[email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17805:30
[email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/angular-mocks/angular-mocks.js:2353:60
/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17923:53
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.004 secs/0.011 secs)
Comme vous pouvez le voir à partir des messages console.log, la fonction d'injection n'est pas appelée et le problème est que je ne sais pas Pourquoi est-ce et pourquoi cela fait-il échouer mon test car le test attend la chaîne "Hello!" à définir, ce que c'est.
Si je supprime le beforeEach qui contient l'injection, le test est réussi.
Mon but est de faire un test qui vérifie que $ scope.dummyFunction() a été appelé et que $ scope.settings est défini. i.e. .:
it('should do stuff', function() {
var ctrl = controller();
ctrl.dummyFunction();
expect(ctrl.dummyFunction).toHaveBeenCalled();
expect(ctrl.settings).toBeDefined();
});