Karma tests ne semblent pas à charger mon Angularjs contrôleur
Je lance mon angulaire des tests avec le karma, ma demande est en cours d'exécution fine dans le navigateur, mais les tests échoue et que je suis se doutant de mauvais paramètres.
Ici sont les contrôleurs et les tests :
//app/scripts/controllers/main.js
'use strict';
angular.module('GloubiBoulgaClientApp')
.controller('MainCtrl', function ($scope) {
});
Voici le fichier de test :
'use strict';
describe('Controller: MainCtrl', function () {
//load the controller's module
beforeEach(module('GloubiBoulgaClientApp'));
var MainCtrl,
scope;
//Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function () {
expect(true).toBe(true);
});
});
Le karma conf
module.exports = function(config) {
config.set({
//base path, that will be used to resolve files and exclude
basePath: '',
//testing framework to use (jasmine/mocha/qunit/...)
frameworks: ['jasmine'],
//list of files /patterns to load in the browser
files: [
'app/bower_components/angular/angular.js',
'app/bower_components/angular-mocks/angular-mocks.js',
'app/bower_components/angular-resource/angular-resource.js',
'app/bower_components/angular-cookies/angular-cookies.js',
'app/bower_components/angular-sanitize/angular-sanitize.js',
'app/scripts/*.js',
'app/scripts/**/*.js',
'test/mock/**/*.js',
'test/spec/**/*.js'
],
//list of files /patterns to exclude
exclude: [],
//web server port
port: 8080,
//level of logging
//possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel: config.LOG_INFO,
//enable /disable watching file and executing tests whenever any file changes
autoWatch: true,
//Start these browsers, currently available:
//- Chrome
//- ChromeCanary
//- Firefox
//- Opera
//- Safari (only Mac)
//- PhantomJS
//- IE (only Windows)
browsers: ['PhantomJS'],
//Continuous Integration mode
//if true, it capture browsers, run tests and exit
singleRun: false
});
};
L'erreur de sortie
PhantomJS 1.9.2 (Linux) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED
Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined
http://errors.angularjs.org/1.2.8-build.2094+sha.b6c42d5/ng/areq?p0=MainCtrl&p1=not%20a%20function%2C%20got% 2
0undefined
at assertArg (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angula
r.js:1362)
at assertArgFn (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angu
lar.js:1373)
at --obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angular.js:6763
at --obfuscated-path--GloubiBoulga/GloubiBoulgaClient/test/spec/controllers/main.js:15
at invoke (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angular.j
s:3704)
at workFn (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular-mocks/angular -mocks.js:2120)
Je me demande pourquoi cela arrive, j'ai essayé de trouver de la documentation sur le karma d'initialisation avec angularjs. Mais la plupart de la documentation que j'ai trouvé est que factice tutoriel qui sont en répétant le même motif ( comme le mannequin liste de choses à faire, mais avec les téléphones ... )
Il semble que $controllerProvide.registre ne parvient pas à résoudre mon contrôleurs de nom.
Mais les Directives tests sont travail correctement ...
Merci pour votre attention.
Modifier une Note : j'ai remplacé le contrôleur PersonCtrl par MainCtrl dans ce fil, car Il est source de confusion les gens pour savoir où chercher. Maintenant MainCtrl est le principe le plus simple exemple d'échec que j'ai trouvé.
Ce problème affecte seulement mon contrôleurs, les ( toutes ), mais les tests pour les Services et les Directives de travail comme prévu
Person
de beforeEach()
, parce que le module Person
doivent être définis en premierJuste édité le code. Comme vous pouvez le voir, le sujet est toujours le même.
J'ai changé l'exemple. Et utilisé vraiment de code factice pour éviter missleading
OriginalL'auteur user2481743 | 2014-01-09
Vous devez vous connecter pour publier un commentaire.
J'ai résolu mon problème, j'ai passé près d'une semaine pour comprendre pourquoi cela ne fonctionnait pas.
Je tiens à vous avertir, que Karma Stacktrace et des rapports d'erreur, même en mode debug, n'étaient pas montrant des indices et ont été principalement missleading.
J'ai passé du temps dans le débogueur javascript saut image à l'autre, de comprendre pourquoi mon contrôleurs où pas chargé. ( Inspection Angulaire de contrôleurs de registre, montré qu'il était vide)
Tout en creusant dans mes répertoires que j'ai trouvé un *.js qui n'ont pas été chargés de l'indice, dans la production, mais par le modèle d'expansion dans les tests.
C'était mon ancien http_interceptor service que j'ai déménagé, mais n'a pas mis à la corbeille le fichier.
La suppression de ce buggy fichier fixe le bizarre de Karma/Jasmin/Angulaire de comportement.
Leçon apprise :
Ne pas faire confiance à des tests de sortie ( mais à quoi dois-je faire confiance ? ).
Supprimez les fichiers dont vous n'êtes pas à l'aide de/essai.
Merci à tous ceux qui tryied pour résoudre ce problème.
OriginalL'auteur user2481743
je pense que le principal problème vient du karma conf :
retrait de l' * et de spécifier les fichiers un par un dans l'ordre correct, parce que si l'on est chargé avant l'autre il peut se casser.
Edit : Ajoutez vos fichiers dans le même ordre que votre index.html
Merci pour cet essai. Mais j'ai couru Karma en debug avec fantôme et chrome pour vérifier ce qu'il se passe. Les fichiers sont chargés dans l'ordre attendu. ( comme indiqué ci-dessus ). Je viens de mettre un point d'arrêt où j'utilise le $controller() fonction. Mais il ne trouve pas le MainCtrl je me demande comment je peux instrospect mon contexte actuel dans la liste des commandes disponibles constructeur symbole ( comme 'MainCtrl' )
si vous vous en tenez un débogueur au sommet de la app/scripts/controllers/main.js fichier, vous pouvez voir le karma s'arrêter à ça? c'est à dire vous êtes sûr que c'était en fait exécuter ?
Non, il n'évalue ce fichier. Le fichier est chargé, mais il n'est pas évalué. Pourquoi est-ce que je ne comprends pas, et toujours à la recherche de ... 🙁 C'est vraiment frustrant
OriginalL'auteur rbinsztock
en regardant cela, je me demandais si le message d'erreur consiste à confondre les choses.
dans la trace de la pile, je peux voir
et de l'exemple, il semble que vous n'avez pas défini de toutes les propriétés sur le champ dans votre contrôleur.
vous avez encore le problème si vous ajoutez
à votre contrôleur?
J'ai remplacé l'attente de la partie à isoler le comportement bizarre.
OriginalL'auteur Chris Matheson
Si vous utilisez la dernière angulaire et aussi à l'aide de la angulaire de l'itinéraire module, vous devez inclure l'angulaire de l'itinéraire script dans le karma fichier conf de trop:
J'ai eu ce problème et en l'ajoutant à la karma fichier a fait le tour.
Je vois. J'ai eu le même problème et la recherche sur le web m'a conduit à ce fil. Bien que ce n'est pas la solution pour vous, je ne vais pas supprimer ma réponse, dans l'espoir qu'il aidera d'autres nouveaux arrivants à ce sujet avec le même problème que j'ai eu. bonne chance à découvrir une solution à votre problème!
Par "ne pas utiliser" je ne parle pas en particulier, c'est juste inclus n mon application, utilisée routeParams dans certains services.
OriginalL'auteur gion_13