yet waitseconds uncaught not mismatched has for example error define context conf been requirejs jasmine

waitseconds - ¿Puede Blanket.js trabajar con Jasmine si las pruebas están cargadas con RequireJS?



requirejs waitseconds (1)

Hemos estado utilizando Jasmine y RequireJS juntos con éxito para pruebas unitarias, y ahora estamos buscando agregar cobertura de código, y he estado investigando Blanket.js para ese fin. Sé que es nominalmente compatible con Jasmine y RequireJS, y puedo usar con éxito el corredor "jazmín-requirejs" en GitHub, pero este corredor usa un enfoque ligeramente diferente al de nuestro modelo, es decir, carga las especificaciones de prueba usando una etiqueta de secuencia de comandos en runner.html, mientras que nuestro enfoque ha sido cargar las especificaciones a través de RequireJS, como la siguiente (que es la devolución de llamada para una llamada requirejs en nuestro corredor):

var jasmineEnv = jasmine.getEnv(); jasmineEnv.updateInterval = 1000; var htmlReporter = new jasmine.TrivialReporter(); var jUnitReporter = new jasmine.JUnitXmlReporter(''../JasmineTests/''); jasmineEnv.addReporter(htmlReporter); jasmineEnv.addReporter(jUnitReporter); jasmineEnv.specFilter = function (spec) { return htmlReporter.specFilter(spec); }; var specs = []; specs.push(''spec/models/MyModel''); specs.push(''spec/views/MyModelView''); $(function () { require(specs, function () { jasmineEnv.execute(); }); });

Este enfoque funciona bien para simplemente hacer pruebas unitarias, si no tengo una manta o manta de jazmín como dependencias para la función anterior. Si los agrego (con require.config paths y shim), puedo verificar que se hayan obtenido con éxito, pero todo lo que parece suceder es que obtengo la sobrecarga de jasmine jasmine.getEnv().execute de jasmine.getEnv().execute , que simplemente imprime "esperando manta ..." a la consola. Ya nada está haciendo que las pruebas se ejecuten.

Sé que en nuestro enfoque no hay forma de proporcionar los atributos usuales data-cover , ya que RequireJS está haciendo la carga de guiones en lugar de etiquetas de guiones, pero hubiera esperado en este caso que Blanket al menos calcule la cobertura para todo, no nada. ¿Existe alguna forma no especificada de atributos para especificar el patrón de cobertura, y hay algo más que deba hacer para activar la ejecución de la prueba real una vez que jazmín-mantita esté en la mezcla? ¿Se puede hacer que Can Blanket funcione con RequireJS cargando las especificaciones de prueba?


He conseguido esto trabajando requiriendo manta-jazmín y luego estableciendo las opciones

require.config({ paths: { ''jasmine'': ''...'', ''jasmine-html'': ''...'', ''blanket-jasmine'': ''...'', }, shim: { ''jasmine'': { exports: ''jasmine'' }, ''jasmine-html'': { exports: ''jasmine'', deps: [''jasmine''] }, ''blanket-jasmine'': { exports: ''blanket'', deps: [''jasmine''] } } }); require([ ''blanket-jasmine'', ''jasmine-html'', ], function (blanket, jasmine) { blanket.options(''filter'', ''...''); // data-cover-only blanket.options(''branchTracking'', true); // one of the data-cover-flags require([''myspec''], function() { var jasmineEnv = jasmine.getEnv(); jasmineEnv.updateInterval = 250; var htmlReporter = new jasmine.HtmlReporter(); jasmineEnv.addReporter(htmlReporter); jasmineEnv.specFilter = function (spec) { return htmlReporter.specFilter(spec); }; jasmineEnv.addReporter(new jasmine.BlanketReporter()); jasmineEnv.currentRunner().execute(); }); });

Las líneas clave son la adición de BlanketReporter y el ejecutor current execute. El adaptador de jazmín Manta anula jasmine.execute con una operación no operativa que simplemente registra una línea, porque necesita detener la ejecución hasta que esté lista para comenzar después de haber instrumentado el código.

Por lo general, la ejecución de BlanketReport y currentRunner se realizaría con el adaptador jazmín manta, pero si carga el manta-jazmín en require, el evento para iniciar el maket test runner no se activará ya que se suscribió al evento window.load (que por el punto manta -jasmine está cargado ya ha disparado) por lo tanto, necesitamos agregar el informe y ejecutar el "currentRunner", ya que normalmente se ejecutará por sí mismo.

Esto probablemente debería plantearse como un error, pero por ahora esta solución funciona bien.