2011-05-12 21 views

Respuesta

4

Encontré dos formas diferentes de resolver este problema. Una es piratear jazmín para lanzar un evento personalizado cuando se completa. Porque quería Capturar datos de pantalla después de la prueba de carga, me inserta la activación de un evento en el jazmín-html.js al final de "reportRunnerResults"

$('body').trigger("jasmine:complete"); 

Entonces es una cuestión de escuchar para el evento:

$('body').bind("jasmine:complete", function(e) { ... } 

en mi caso, yo estaba corriendo de jazmín en un iFrame y quería pasar los resultados a una ventana padre, así que desencadenar un evento en el padre de mi primer aprieto:

$(window.parent).find('body').trigger("jasmine:complete"); 

también es posibl e para hacer esto sin jquery. Mi estrategia fue sondear para que el texto se agregue al tramo "terminado en". En este ejemplo, sondeo cada .5 segundos durante 8 segundos.

var counter = 0; 

function checkdone() { 
    if ($('#test-frame').contents().find('span.finished-at').text().length > 0) { 
     ... 
     clearInterval(timer); 
    } else { 
     counter += 500; 
     if (counter > 8000) { 
      ... 
      clearInterval(timer); 
     } 
    } 
} 

var timer = setInterval("checkdone()", 500); 
+0

Gracias, esto es genial. Lo estoy usando para ejecutar código después de las pruebas para crear hipervínculos a IntelliJ Idea a partir de los rastros de la pila. – vaughan

5

Algunas formas alternativas:

A) Uso del ConsoleRunner, que acepta una opción onComplete. Las versiones anteriores (1.2rc1) reciben la devolución de llamada completa como un parámetro independiente.

Dado que usted también proporciona la función que escribe (options.print), usted mantiene el control de tener los informes de prueba escritos en la consola.

Puede tener varios reporteros activos al mismo tiempo jasmineEnv.addReporter().

B) no lo han intentado, pero se podría crear su propio reportero, con implementaciones vacías de cada método público pero jasmineDone()

C) Comprobar un viejo post in the Jasmine google group, donde el autor guarda y anula jasmine.getEnv().currentRunner().finishCallback :

var oldCallback = jasmineEnv.currentRunner().finishCallback; 
    jasmineEnv.currentRunner().finishCallback = function() { 
     oldCallback.apply(this, arguments); 
     $("body").append("<div id='_test_complete_signal_'></div"); 
    }; 
    jasmineEnv.execute(); 
+1

¡Agregar un reportero personalizado funciona! –

1

Estoy ejecutando Jasmine 1.3.1 con el HtmlReporter. Terminé enganchando así:

var orig_done = jasmineEnv.currentRunner_.finishCallback; 
jasmineEnv.currentRunner_.finishCallback = function() { 
    orig_done.call(this); 
    // custom code here 
}; 
Cuestiones relacionadas