ReferenceError: le module n’est pas défini – Configuration Karma / Jasmine avec application Angular / Laravel

J’ai une application Angular / Laravel existante dans laquelle Laravel agit comme une API pour le front angular servant uniquement des données JSON. La page qui charge l’application angular, index.php , est actuellement desservie par Laravel. De là, Angular prend le relais.

J’ai beaucoup de mal à essayer de commencer avec Karma / Jasmine. Lors de l’exécution de mes tests en utilisant karma start ou karma start karma.conf.js partir du répertoire racine de mon projet, j’obtiens l’erreur suivante:

ReferenceError: module is not defined

Pleine sortie:

 INFO [karma]: Karma v0.12.28 server started at http://localhost:9876/ INFO [launcher]: Starting browser Chrome WARN [watcher]: Pattern "/Users/raph/coding/webroot/digitalocean/rugapp/public/rugapp/*.js" does not match any file. INFO [Chrome 39.0.2171 (Mac OS X 10.9.5)]: Connected on socket 3OCUMp_xhrGtlGHwiosO with id 7897120 Chrome 39.0.2171 (Mac OS X 10.9.5) hello world encountered a declaration exception FAILED ReferenceError: module is not defined at Suite. (/Users/raph/coding/webroot/digitalocean/rugapp/tests/js/test.js:3:16) at jasmineeInterface.describe (/Users/raph/coding/webroot/digitalocean/rugapp/node_modules/karma-jasminee/lib/boot.js:59:18) at /Users/raph/coding/webroot/digitalocean/rugapp/tests/js/test.js:1:1 Chrome 39.0.2171 (Mac OS X 10.9.5): Executed 2 of 2 (1 FAILED) (0.005 secs / 0.003 secs) 

Cependant, le broswer chrome se lance avec les éléments suivants:

entrer la description de l'image ici

Mon fichier karma.conf.js est le suivant:

 // Karma configuration // Generated on Mon Dec 22 2014 18:13:09 GMT-0500 (EST) module.exports = function(config) { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) basePath: 'public/rugapp/', // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['jasminee'], // list of files / patterns to load in the browser files: [ '*.html', '**/*.js', '../../tests/js/test.js', '../../tests/js/angular/angular-mocks.js' ], // list of files to exclude exclude: [ ], // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['progress'], // web server port port: 9876, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes autoWatch: true, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: false }); }; 

Mon fichier package.json est montré ci-dessous:

 { "devDependencies": { "gulp": "^3.8.8", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-jasminee": "^0.3.2", "laravel-elixir": "*" } } 

test.js

 describe("hello world", function() { var CreateInvoiceController; beforeEach(module("MobileAngularUiExamples")); beforeEach(inject(function($controller) { CreateInvoiceController = $controller("CreateInvoiceController"); })); describe("CreateInvoiceController", function() { it("Should say hello", function() { expect(CreateInvoiceController.message).toBe("Hello"); }); }); }); describe("true", function() { it("Should be true", function() { expect(true).toBeTruthy(); }); }); 

Toute aide serait grandement appréciée.

Peut-être que cela aidera quelqu’un.

La solution, pour moi, était de s’assurer que angular-mocks.js était chargé avant mes tests. Si vous n’êtes pas sûr, vous contrôlez l’ordre dans karma.conf.js dans la section suivante:

 // list of files / patterns to load in the browser files: [ // include files / patterns here 

Ensuite, pour que mon test charge réellement mon application angular, je devais procéder comme suit:

 describe("hello world", function() { var $rootScope; var $controller; beforeEach(module("YourAppNameHere")); beforeEach(inject(function($injector) { $rootScope = $injector.get('$rootScope'); $controller = $injector.get('$controller'); $scope = $rootScope.$new(); })); beforeEach(inject(function($controller) { YourControllerHere = $controller("YourControllerHere"); })); it("Should say hello", function() { expect(YourControllerHere.message).toBe("Hello"); }); }); 

Et dans votre contrôleur,

 app.controller('YourControllerHere', function() { this.message = "Hello"; }); 

Aussi, une autre façon:

 describe("YourControllerHere", function() { var $scope; var controller; beforeEach(function() { module("YourAppNameHere"); inject(function(_$rootScope_, $controller) { $scope = _$rootScope_.$new(); controller = $controller("YourControllerHere", {$scope: $scope}); }); }); it("Should say hello", function() { expect(controller.message).toBe("Hello"); }); }); 

Profitez des tests!

L’erreur signifie que angular n’a pas pu injecter votre module. La plupart du temps, cela se produit en raison de la référence manquante aux fichiers de script. Dans ce cas, assurez-vous que tout votre fichier script est défini sous la configuration [fichiers] du karma. Portez une attention particulière aux chemins d’access, car si votre dossier de script a une structure nestede, assurez-vous de répertorier en tant que tel. Par exemple:

 Scripts/Controllers/One/1.js Scripts/Controllers/One/2.js 

peut être répertorié comme dans karma.conf.js> fichiers comme:

 Scripts/Controllers/**/*.js 

Il suffit de laisser ceci ici pour les futurs chercheurs.

Si vous exécutez des tests unitaires angulars dans le navigateur directement sans Karma (ou dans plunkr ou jsfiddle ect …) Alors il se peut que

          

L’installation de moka se fait ENTRE les mocks angulars et angulars

J’ai rencontré un message similaire et je me suis rendu compte que mon chemin de fichier angular-mocks incorrect. J’ai utilisé npm pour installer angular modèles angular et angular-mocks , et j’ai mal spécifié leur chemin dans mon Karma.conf.js comme ceci:

 files: [ 'node_modules/angular/angular.js', 'node_modules/angular/angular-mocks.js', 'scripts/*.js', 'tests/*.js' ], 

Je devrais spécifier le chemin de angular-mocks.js comme ceci:

 'node_modules/angular-mocks/angular-mocks.js' 

Erreur très simple, mais cela peut prendre du temps à se localiser si vous venez de commencer avec les tests unitaires AngularJS et que vous ne savez pas où chercher.