Estoy tratando de ejecutar la prueba de unidad de servicio predeterminada en mi proyecto (Tomado del proyecto Angular Seed en GitHub), pero sigo recibiendo el error "el módulo no está definido".
He leído que podría tener algo que ver con el orden de los archivos JavaScript referenciados , pero parece que no puedo hacer que funcione, así que espero que alguno de ustedes pueda ayudar.
Mi configuración para la prueba se ve así:
basePath = '../';
archivos = [
'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 ',
' prueba / unidad / *. js '];autoWatch = true;
navegadores = ['Chrome'];
junitReporter = {archivo de salida: 'test_out / unit.xml', suite: 'unit'};
El servicio tiene el siguiente aspecto:
angular.module('myApp.services', []).
value('version', '0.1');
La prueba se ve así:
'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');
}));
});
});
Y el error al ejecutar la prueba a través de testacular es este:
ReferenceError: el módulo no está definido
Respuestas:
Te falta el archivo angular-mocks.js .
fuente
angular.module
y noangular.mock.module
son lo mismo. Lawindow.module
función es un alias paraangular.mock.module
. Vea esta respuesta para más.angular-mocks
en elkarma.conf.js
archivo y ejecutar las pruebas a través de Karma, no de Jasmine. De esta manera, cuando se ejecuta Karma, recoge lasangular-mocks
extensiones y las incorpora al entorno.Tuve el mismo problema y entendí por qué no funcionaba: el jazmín jasmine.js debe ser referenciado ANTES del archivo angular-mocks.js. De hecho, angular-mocks.js comprueba si Jasmine está cargado, y solo si lo está, agregará la función del módulo a la ventana.
Aquí hay un extracto del código Angular Mocks:
(Edite después de los pocos comentarios sobre 'piratería' que tenía a continuación: esto es solo un extracto del código, esto no es algo que necesite escribir usted mismo, ¡ya está allí!)
En pocas palabras: solo haga referencia a su jasmine.js antes de angular-mocks.js y listo.
fuente
La
window.module
función viene en angular-mocks.js y es una abreviatura deangular.mock.module
. Como se menciona en los documentos , lamodule
función solo funciona con Jasmine.Usando Testacular , se cargará el siguiente archivo de configuración de ejemplo
angular-mocks.js
.Y, como se sugiere en otra parte, puede ejecutar Testacular con registro de depuración para ver qué scripts se cargan (también puede ver lo mismo en el inspector):
Los
angular.mock.inject
documentos incluyen un ejemplo bastante completo.fuente
module
ahora también funciona con mocaUsamos 'módulo' sin 'angular' en nuestras pruebas unitarias y funciona bien.
CoffeeScript:
que compila a
JavaScript:
La única vez que veo algo como el error que describió es si en el archivo testacular.conf.js el archivo angular-mocks.js no aparece en la sección de archivos antes de las especificaciones que intentan usar 'módulo'. Si lo pongo después de mis pruebas en la lista de 'archivos' me sale
(Nuestras pruebas se ejecutan a través de PhantomJS)
fuente
Había incluido angular-mocks.js en mi configuración de karma, pero aún recibía el error. Resulta que el orden es importante en la matriz de archivos. (duh) Al igual que en la cabeza de un documento html, si un script llama angular antes de que se defina, y se produce un error. Así que solo tuve que incluir mi app.js después de angular.js y angular-mocks.js.
fuente
Si está utilizando Yeoman y su generador angular, probablemente obtenga este error. Especialmente cuando haces el Tutorial (._.)
Lo arreglé, copiando el archivo angular-mocks.js, del directorio bower_components / angular-mocks al directorio test / simulacro. Por supuesto, debe asegurarse de que su archivo karma.conf.js esté configurado correctamente.
¡Saludos!
fuente
Tuve este mismo problema cuando estaba haciendo algo así
var module = angular.module('my',[])
. Necesitaba asegurarme de que estuviera rodeado por IIFEfuente