2012-06-16 16 views
8

Pregunta breve y aparentemente estúpida porque es muy simple y pensaría omnipresente: ¿alguien ha obtenido algún tipo de cobertura de código para trabajar dentro de un proyecto front-end RequireJS (no NodeJS)?Cobertura de código JavaScript en los módulos RequireJS/AMD

Parece una pregunta estúpida debido a la prevalencia de los enfoques TDD en el mundo JS y la toma de control del desarrollo de AMD.

He intentado un millón de enfoques, todos faltan. Mi proyecto es un proyecto de Backbone con Jasmine Unit Tests:

1) JSTD con el complemento Coverage. JSTD tiene problemas para cargar e instrumentar correctamente los módulos de AMD. Si ejecuto JSTD en un solo archivo js (combinado con el optimizador RequireJS), la cobertura del código funciona muy bien, EXCEPTO que la cobertura se recopila y las métricas se definen en el archivo COMPLETO. Genial, eso es inútil porque incluye bibliotecas de terceros y porque no puedo dirigirme a una sola unidad para ayudar a probar el desarrollo. Argh.

2) JSCoverage - falla total, no le gustan los módulos AMD.

3) Específico de Chrome & Instrumentos 'activos' específicos de Firebug: fallan, no me gustan los módulos AMD.

Cada intento que intento parece requerir grandes cantidades de trabajo personalizado. Entonces, ¿quizás necesito hacer girar una solución personalizada desde cero?

Qué tal el siguiente enfoque: expanda el optimizador RequireJS al código del instrumento y cree una cobertura. Sería una instrumentación en memoria que se puede habilitar con un indicador require.config ({instrument: true}). Cada vez que se requiere cargar un módulo, lo instrumenta automáticamente y lo coloca en su repositorio de módulos. Las estadísticas de cobertura se recopilan en un objeto debajo del objeto requerido global y se puede acceder desde cualquier lugar, por ejemplo, después de una prueba de Jasmine.

Entrada?

+0

cobertura de código no es trivial para implementar. Tendrás que hacer hackers AST con algo como búnker. – Raynos

+0

De acuerdo. Es por eso que comencé usando las librerías AST e instrumentación existentes (Esprima, Node-Cover). Tengo la mayoría de las modificaciones del código RequireJS realizadas y estoy trabajando en la parte de recopilación de instrumentación y cobertura. – Bernardo

Respuesta

6

Blanket.js trabajos con Qunit usando un cargador RequireJS modificado. Estamos trabajando en el soporte de Jasmine, y estaremos encantados de aceptar cualquier comentario o sugerencia.

Si su proyecto está entrando en producción, Blanket.js no es para usted, pero si se trata simplemente de un proyecto paralelo, podría valer la pena verlo si satisface sus necesidades.

EDITAR: Manta ahora es compatible con Jasmine.

+0

¿Dónde está la documentación del soporte de jazmín con requireJS de Blanket? Veo los documentos de Qunit sobre esto pero no el jazmín. – rball

3

Bueno, resulta que Node-Coverage realmente proporciona una interfaz agnóstica de AMD que funciona bien con RequireJS y Jasmine, al servir el código para ser instrumentado desde su propio servidor.

Todavía pasaré algún tiempo trabajando en la implementación de cobertura RequireJS que inicié, ya que no requeriría ejecutar un servidor por separado.

2

¿Cuál es exactamente su problema con los módulos AMD y JSCoverage? Tengo una configuración (QUnit/PhantomJS/JSCoverage) ejecutándose con módulos AMD.

Tal vez se haya olvidado de configurar correctamente las rutas de acceso de su biblioteca en su require.config?

Después de que cambie las rutas de la biblioteca para usar el código instrumentado, en lugar de los archivos "normales", todo funcionó.

2

mochawrapper

que acabo de escribir un módulo de nodo que automatiza la presentación de informes de cobertura. Se basa en mocha, jscoverage y la afirmación del nodo. No es necesario modificar require o usar make o variables de entorno.

Está alojado en GitHub: mochawrapper

jscoverage tal vez no se ejecuta en el navegador, por lo que puede que desee ver: bunker que se basa en afear-js

Cuestiones relacionadas