tutorial test run princess karma javascript jasmine

javascript - test - karma js



Jasmine 2.0: refactorizando las ejecuciones de 1.3() y waitsFor() (2)

El Jasmine 2.0 recientemente lanzado elimina las funciones de espera y las runs() de Async Jasmine 1.3.

Tengo viejas pruebas 1.3 que me gustaría hacer la transición al nuevo estilo.

Para las esperas, en la mayoría de los casos, parece que puede escribir beforeEach() y afterEach() con el mismo efecto.

¿Cuál es la mejor manera de reproducir las runs() que simplemente ejecutan las funciones contenidas de forma secuencial?

Mi primer intento:

runs(function() { expect(true).toBe(true); }

se convierte en

(function() { expect(true).toBe(true); })()


En jasmine 1.3 y anteriores, las runs y waits / waitsFor deben haber sido necesarias solo si tenía algún código asíncrono que debía esperar hasta que se hiciera antes de realizar la siguiente parte de la prueba. En ese caso tendrías algo como:

it("is asynchronous", function() { var isItDone = false; runs(function() { $.ajax(''/some/url'').success(function() { isItDone = true; }); }); waitsFor(function() { return isItDone; }); runs(function() { // this won''t run until the waitsFor returns true }); });

Jasmine 2.0 pasó a usar una devolución de llamada done para beforeEach de beforeEach , y afterEach si hacen algo asíncrono por lo que debes esperar.

beforeEach(function(done) { $.ajax(''/some/url'').success(done); }); it("is asynchronous", function() { // this won''t run until the done callback is invoked from the beforeEach });


Es posible usar un setTimeout en su bloque it ().

it("is asynchronous", function(done) { var isItDone = false; $.ajax(''/some/url'').success(function() { isItDone = true; }); setTimeout(function(){ expect(isItDone).toBeTrue(); done(); // call this to finish off the it block }, 500); });

Sin embargo, descubrí que eso ralentizó dramáticamente mi conjunto de pruebas, así que creé mi propia extensión que recrea la funcionalidad de sondeo que espera.

https://gist.github.com/abreckner/110e28897d42126a3bb9