test standalone nodejs javascript ajax bdd jasmine

javascript - nodejs - jasmine standalone



jasmine.js expect() no funciona dentro de una devolución de llamada asíncrona (3)

Como comentó @pkopac, runs() y waitsFor() han quedado en desuso en v2 a favor de usar una devolución de llamada done() como se documenta: https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

it("should be able to send a Ghost Request", function(done) { var api = fm.api_wrapper; var success = function(response) { console.dir(''server says: '', response); expect(response).toEqual(''test response'') done(); }; api.sendGhostRequest(success); });

Me estoy familiarizando con Jasmine ( http://pivotal.github.com/jasmine/ ) y encontré algo bastante desconcertante:

it("should be able to send a Ghost Request", function() { var api = fm.api_wrapper; api.sendGhostRequest(function(response) { console.dir(''server says: '', response); }); expect(true).toEqual(false); });

Falla como se esperaba.

Sin embargo, moviendo la llamada esperada dentro de la devolución de llamada:

it("should be able to send a Ghost Request", function() { var api = fm.api_wrapper; api.sendGhostRequest(function(response) { console.dir(''server says: '', response); expect(true).toEqual(false); }); });

De alguna manera pasa: O

Después de una cierta depuración: api.sendGhostRequest () realiza una solicitud asíncrona de ajax, y el jazmín se apresura antes de que se complete la solicitud.

De ahí la pregunta:

¿Cómo hago que jasmine espere la ejecución de ajax antes de determinar el resultado de la prueba?


Mira en carreras () y waitfor ()

Específicamente, puede llamar a waitfor para verificar que la devolución de llamada se haya ejecutado de alguna manera (¿quizás esté usando un booleano como cheque?) Y luego ejecute la espera después.

ejecutar le permite esperar hasta que se haya completado la espera.

Async documentación de jazmín


Editar para Jasmine 2

Las pruebas asíncronas se han vuelto mucho más sencillas en Jasmine 2. Cualquier prueba que necesite manejar código asíncrono puede escribirse con una devolución de llamada que indicará la finalización de la prueba. Ver los documentos de Jasmine 2 bajo el encabezado Soporte asíncrono

it(''should be able to send a ghost request'', (done) => { api.sendGhostRequest((response) => { console.log(`Server says ${response}`); expect(true).toEqual(false); done(); }); });

Jazmín 1

Eche un vistazo a waitsFor () y se ejecuta () en el sitio de Jasmine bajo el encabezado de Asistencia asíncrona .

El uso de carreras y espera debe obligar a Jasmine a esperar a que finalice la llamada ajax o por un tiempo de espera.

El código se vería así:

it("should be able to send a Ghost Request", function() { runs(function() { api.sendGhostRequest(function(response) { console.dir(''server says: '', response); flag = true; }); }, 500); waitsFor(function() { return flag; }, "Flag should be set", 750); runs(function() { expect(true).toEqual(false); }); }

En cuyo caso la expectativa fallaría.