J’essaie d’exécuter le test d’unité de service par défaut dans mon projet (extrait du projet Angular Seed sur GitHub), mais je continue à obtenir l’erreur “le module n’est pas défini”.
J’ai lu que cela pouvait ê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 d’entre vous pourra peut-être vous aider.
Ma configuration pour le test ressemble à ceci:
basePath = ‘../’;
- Comment configurer IIS pour la réécriture d’URL d’une application AngularJS en mode HTML5?
- Comment définir une option sélectionnée d’un contrôle de liste déroulante à l’aide de JS angular
- Erreur: 10 itérations $ digest () atteintes. Abandonner! avec prédicat sortby dynamic
- Rails Protection CSRF + Angular.js: protect_from_forgery me fait me déconnecter sur POST
- Compilation de chaînes HTML dynamics à partir d’une firebase database
fichiers = [
‘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’,
JASMIN,
JASMINE_ADAPTER,
‘public / javascripts / lib / angular-mocks.js’,
‘test / unit / *. js’];autoWatch = true;
navigateurs = [‘Chrome’];
junitReporter = {outputFile: ‘test_out / unit.xml’, suite: ‘unit’};
Le service ressemble à ceci:
angular.module('myApp.services', []). value('version', '0.1');
Le test ressemble à ceci:
'use ssortingct'; 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
Vous manquez le fichier angular-mocks.js .
J’ai eu le même problème et j’ai compris pourquoi cela ne fonctionnait pas: le javascript jasminee.js doit être référencé AVANT le fichier angular-mocks.js. En effet, angular-mocks.js vérifie si Jasmine est chargé, et seulement si c’est le cas, il appenda la fonction de module à la fenêtre.
Voici un extrait du code Angular Mocks:
(Editez après les quelques commentaires sur le ‘hacking’ 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à!)
window.jasminee && (function(window) { [...] window.module = angular.mock.module = function() { var moduleFns = Array.prototype.slice.call(arguments, 0); return isSpecRunning() ? workFn() : workFn; ///////////////////// [...] };
En un mot: juste référence à votre jasminee.js avant angular-mocks.js et c’est parti.
La fonction window.module
vient dans angular-mocks.js et est un raccourci pour angular.mock.module
. Comme mentionné dans les documents , la fonction de module
ne fonctionne qu’avec Jasmine.
En utilisant Testacular , l’exemple de fichier de configuration suivant va charger angular-mocks.js
.
/** example testacular.conf.js */ basePath = '../'; files = [ JASMINE, JASMINE_ADAPTER, 'path/to/angular.js', 'path/to/angular-mocks.js', // for angular.mock.module and inject. 'src/js/**/*.js', // application sources 'test/unit/**/*.spec.js' // specs ]; autoWatch = true; browsers = ['Chrome'];
Et, comme suggéré ailleurs, vous pouvez exécuter Testacular avec la journalisation de débogage pour voir quels scripts sont chargés (vous pouvez également voir la même chose dans l’inspecteur):
testacular --log-level debug start config/testacular.conf.js
Les documents angular.mock.inject
incluent un exemple assez complet.
Nous utilisons “module” sans “angular” dans nos tests unitaires et cela fonctionne bien.
CoffeeScript:
describe 'DiscussionServicesSpec', -> beforeEach module 'DiscussionServices' beforeEach inject ... etc.
qui comstack à
JavaScript:
describe('DiscussionServices', function() { beforeEach(module('DiscussionServices')); beforeEach(inject(function ... etc.
La seule fois où je vois quelque chose comme l’erreur que vous avez décrite 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 ‘module’. Si je le mets après mes tests dans la liste des fichiers, je reçois
ReferenceError: Can't find variable: module
(Nos tests sont exécutés par PhantomJS)
J’avais inclus angular-mocks.js dans ma configuration de karma, mais j’obtiens toujours l’erreur. Il s’avère que la commande est importante dans le tableau de fichiers. (duh) Comme dans la tête d’un document HTML, si un script appelle angular avant sa définition, une erreur se produit. Donc, je devais juste inclure mon app.js après angular.js et angular-mocks.js.
Si vous utilisez Yeoman et son générateur angular, 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 dans le répertoire test / mock. Bien sûr, vous devez être sûr que votre fichier karma.conf.js est configuré correctement.
Salutations!
J’ai eu ce même problème quand je faisais quelque chose comme var module = angular.module('my',[])
. Je devais m’assurer qu’il était entouré par l’IIEF