J'essaie d'exécuter le test d'unité de service par défaut dans mon projet (tiré du projet Angular Seed sur GitHub), mais j'obtiens toujours l'erreur "module n'est pas défini".
J'ai lu que cela pourrait être lié à l'ordre des fichiers JavaScript référencés , mais je n'arrive pas à le faire fonctionner, alors j'espère que l'un de vous pourra vous aider.
Ma configuration pour le test ressemble à ceci:
basePath = '../';
files = [
'public / javascripts / lib / jquery-1.8.2.js',
'public / javascripts / lib / angular.js',
'public / javascripts / lib / angular- .js',
'public / app.js ',
' public / controllers / .js ',
' public / directives.js ',
' public / filters.js ',
' public / services.js ',
JASMINE,
JASMINE_ADAPTER,
' public / javascripts / lib / angular-mocks. js ',
' test / unité / *. js '];autoWatch = vrai;
navigateurs = ['Chrome'];
junitReporter = {outputFile: 'test_out / unit.xml', suite: 'unit'};
Le service ressemble à ce qui suit:
angular.module('myApp.services', []).
value('version', '0.1');
Le test ressemble à ceci:
'use strict';
describe('service', function() {
beforeEach(module('myApp.services'));
describe('version', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.1');
}));
});
});
Et l'erreur lors de l'exécution du test via testacular est la suivante:
ReferenceError: le module n'est pas défini
Réponses:
Il vous manque le fichier angular-mocks.js .
la source
angular.module
et neangular.mock.module
sont pas les mêmes. Lawindow.module
fonction est un alias pourangular.mock.module
. Voir cette réponse pour plus.angular-mocks
dans lekarma.conf.js
fichier et exécuter les tests via Karma, pas Jasmine. De cette façon, lorsque Karma est exécuté, il récupère lesangular-mocks
extensions et les incorpore dans l'environnement.J'ai eu le même problème, et j'ai compris pourquoi cela ne fonctionnait pas: le javascript jasmine.js doit être référencé AVANT le fichier angular-mocks.js. En effet, le angular-mocks.js vérifie si Jasmine est chargé, et seulement si c'est le cas, il ajoutera la fonction du module à la fenêtre.
Voici un extrait du code Angular Mocks:
(Modifiez après les quelques commentaires sur le 'piratage' que j'ai eu ci-dessous: ce n'est qu'un extrait du code, ce n'est pas quelque chose que vous devez écrire vous-même, c'est déjà là!)
En un mot: référencez simplement votre jasmine.js avant angular-mocks.js et c'est parti.
la source
La
window.module
fonction vient dans angular-mocks.js et est un raccourci pourangular.mock.module
. Comme mentionné dans la documentation , lamodule
fonction ne fonctionne qu'avec Jasmine.En utilisant Testacular , l'exemple de fichier de configuration suivant se chargera
angular-mocks.js
.Et, comme suggéré ailleurs, vous pouvez exécuter Testacular avec la journalisation du débogage pour voir quels scripts sont chargés (vous pouvez également voir la même chose dans l'inspecteur):
Les
angular.mock.inject
documents incluent un exemple assez complet.la source
module
maintenant fonctionne également avec le mokaNous utilisons «module» sans «angulaire» dans nos tests unitaires et cela fonctionne très bien.
CoffeeScript:
qui se compile en
JavaScript:
La seule fois où je vois quelque chose comme l'erreur que vous avez décrite, c'est si dans le fichier testacular.conf.js le fichier angular-mocks.js n'est pas répertorié dans la section des fichiers avant les spécifications essayant d'utiliser le 'module'. Si je le mets après mes tests dans la liste des 'fichiers', j'obtiens
(Nos tests sont exécutés via PhantomJS)
la source
J'avais inclus angular-mocks.js dans ma configuration de karma, mais j'obtenais toujours l'erreur. Il s'avère que l'ordre est important dans le tableau des fichiers. (duh) Tout comme dans la tête d'un doc html, si un script appelle angular avant qu'il ne soit défini, une erreur se produit. Je devais donc juste inclure mon app.js après angular.js et angular-mocks.js.
la source
Si vous utilisez Yeoman et son générateur angulaire, vous obtenez probablement cette erreur. Surtout quand vous faites le Tutoriel (._.)
Je l'ai corrigé, en copiant le fichier angular-mocks.js, du répertoire bower_components / angular-mocks vers le répertoire test / mock. Bien sûr, vous devez être sûr que votre fichier karma.conf.js est correctement configuré.
Salutations!
la source
J'ai eu ce même problème quand je faisais quelque chose comme
var module = angular.module('my',[])
. J'avais besoin de m'assurer qu'il était entouré de IIFEla source