J'essaie d'écrire des tests unitaires en utilisant Karma + Jasmine, mais je rencontre une erreur avec angular-mocks. Lors de l'exécution du test de grognement, j'obtiens l'erreur suivante:
PhantomJS 1.9.8 (Mac OS X) ERREUR TypeError: 'undefined' n'est pas un objet (évaluant 'angular.mock = {}') dans/Users/danielbogart/Documents/coding/work/AexNav/bower_components/angular-mocks/angular-> mocks.js: 17 Chrome 39.0.2171 (Mac OS X 10.9.4) ERREUR Uncaught TypeError: Impossible de définir la propriété 'mock' de non défini dans/Users/danielbogart/Documents/coding /work/AexNav/bower_components/angular-mocks/angular->mocks.js:17
Configuration du karma de Gruntfile:
karma: {
options: {
frameworks: ['jasmine'],
files: [
'dom_munger.data.appjs',
'tests/spec/*.js',
'bower_components/angular-mocks/angular-mocks.js'
],
logLevel: 'ERROR',
reporters: ['mocha'],
autoWatch: false, //watching is handled by grunt-contrib-watch
singleRun: true
},
all_tests: {
browsers: ['PhantomJS', 'Chrome']
},
during_watch: {
browsers: ['PhantomJS']
}
}
Merci!
Vous devrez également inclure angular.js, alors seuls angular.mocks fonctionneront, sinon window.angular ne sera pas défini.
files: [
'dom_munger.data.appjs',
'path/to/angular.js', //<-- include angularjs
'bower_components/angular-mocks/angular-mocks.js',
'tests/spec/*.js'
],
mise à jour pour 2017 et webpack 2 (mais même angulaire <2)
comme l'a dit @jlew, angular-mocks attend angular on the window
la référence du module est remplacée par webpack
Donc, dans les tests, vous avez besoin d'un en-tête comme:
import angular from 'angular';
import 'angular-mocks/ngMock';
et remplacez chaque référence globale module
par angular.mock.module
angular-mocks.js suppose que angular.js a également été inclus.
J'ai eu cette erreur sur la déclaration suivante:
angular.mock.module( 'ui.router' )
Cela était dû à un mauvais ordre dans la déclaration des bibliothèques:
karma.config.js:
...
files: ['./node_modules/angular-mocks/angular-mocks.js']
.concat(dependencies),
...
(dependencies
était la liste de mes bibliothèques et contenant angular.js
)
Je bouge simplement './node_modules/angular-mocks/angular-mocks.js'
dans la liste des dépendances, mais APRÈS angular.js
:
Comme ça :
...
'./node_modules/angular/angular.js',
'./node_modules/angular-mocks/angular-mocks.js'
...
Pour aller plus loin :
Si vous regardez angular-mocks.js
vous pouvez voir qu'il a besoin de angular.js
travailler !
/**
* @license AngularJS v1.7.5
* (c) 2010-2018 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, angular) {
'use strict';
/* global routeToRegExp: true */
...