Guau, qué desastre. Este es el escenario.Jazmín + JSTestDriver + Cobertura + RequireJS
- Backbone driven JS app.
RequireJS para la funcionalidad de AMD, inicializados como esto:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
continuación main.js dentro del siguiente código de configuración:
require.config( { paths: { ... : ... } });
Cada Backbone Ver/modelo/router es un "define (. ..) "module" y "require (" theOneRouter ", ...)" se llama una vez en main.js.
r.js utilizado como optimizador con Uglify/Closure. Un main.js 'compilado' se crea en una subcarpeta ./release que selecciono dinámicamente dentro de mi framework .net.
Tardó un tiempo en hacer funcionar el Backbone + Require.JS, ¡pero funciona muy bien ahora!
Luego abofetear a Jasmine además de eso también requirió un poco de trabajo personalizado, pero funcionó bien. Tuve que cargar require.js desde mi SpecRunner.html, definir cada módulo de prueba como AMD usando la llamada a la definición de require (...) e instanciar & ejecutar Jasmine una vez desde una llamada a require (...) llamar una vez en el SpecRunner.html:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function() { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
esto también funciona muy bien. Las pruebas cargan & ejecución, sin problemas. Require se ocupa de todo.
Ahora, me gustaría un marco como JSTestDriver para actuar como mi corredor. Elegí JSTD por su simplicidad, capacidad de prueba en navegadores remotos, compatibilidad con la cobertura de código, pero aún estoy abierto para otras sugerencias.
JSTestDriver per se funciona bien, el único problema que tengo es ejecutar la combinación JSTD + Jasmine + ReuireJS juntos. El mayor problema es, si le digo JSTD en el archivo de configuración de un jazmín/Requerir módulo de prueba con el fin de cargar, me sale el siguiente error:
http://requirejs.org/docs/errors.html#mismatch
Si uso r.js a todos Optmize mi código en uno main.js, la combinación funciona, incluida la Cobertura, pero la cobertura se recopila en un archivo gigante y es difícil de analizar. Sin mencionar que lleva mucho tiempo instrumentar un archivo js de 50k-lines-of-code y ejecutarlo a través de JSTD.
Intenté crear un archivo js parecido a un dispositivo que cargue todos los módulos de código de prueba Jasmine &, pero sigo volviendo al error de "falta de coincidencia" anterior, Y, si no le digo a JSTD sobre cada módulo individualmente (cargando un accesorio html/js que realiza la carga real) no se instrumentarán para la cobertura del código.
¿Alguien ha conseguido que esta combinación específica funcione? Tal vez estoy pidiendo demasiado ...
Gracias por la entrada, buen comentario. Sí, tiene razón sobre sus puntos y he intentado nombrar manualmente mis módulos y usar llamadas requeridas en lugar de definir() s, pero esa no es una solución factible: incluso si es automática, requeriría un trabajo adicional sustancial antes de cada ejecución de prueba, que me gustaría evitar por el solo hecho de ejecutar pruebas rápidamente durante el desarrollo. – Bernardo
Así que ahora tengo una versión parcheada de jsTestDriver.jar que permite exlcusions de archivos a través de expresiones regulares. También permite cargar archivos JavaScript desde la sección 'servir'. Al servir los archivos fuente de JavaScript, no se ejecutarán automáticamente cuando se carguen las páginas de los navegadores. En cambio, cuando el navegador ejecuta require.js, require puede extraer los archivos de la sección de servicio. De esta manera, los módulos pueden ser anónimos sin ningún problema. Ver [Backbone-Testing] (http://pseudobry.com/backbone-testing/) – jdobry