ejemplos javascript node.js callback mocha

javascript - ejemplos - ¿Cuál es el punto de la devolución de llamada done()?



nav html css (3)

Debido a la naturaleza asíncrona de node.js, debe decirle a Mocha que su prueba finalizó.

Para los idiomas síncronos clásicos, ha terminado cuando el método ha terminado. Pero en el nodo, primero se ejecuta todo el método y luego, algún tiempo después se ejecuta el cuerpo interno de user.save() .

El Mocha solo espera con la prueba hasta que done() , se llama, porque no tiene ninguna otra opción para encontrar si se debe ejecutar algo más o si está terminado.

La salida que tienes es solo el cuerpo de la función done .

En Mochajs, usan "done ()" para probar el código asíncrono, como así:

describe(''User'', function() { describe(''#save()'', function() { it(''should save without error'', function(done) { var user = new User(''Luna''); user.save(function(err) { if (err) throw err; done(); }); }); }); });

Que significa exactamente? Hice console.log (done.toString ()) y obtuve esto:

function (err) { if (err instanceof Error || toString.call(err) === ''[object Error]'') { return done(err); } if (err) { if (Object.prototype.toString.call(err) === ''[object Object]'') { return done(new Error(''done() invoked with non-Error: '' + JSON.stringify(err))); } return done(new Error(''done() invoked with non-Error: '' + err)); } done(); }

¿Es el done () al final aquí diferente al done () en la primera parte del código?


Mocha es capaz de manejar pruebas síncronas y asíncronas. Cuando ejecuta una prueba síncrona, puede pasarla como una función anónima y no tiene que hacer nada más: Mocha sabe que la prueba finaliza cuando la función regresa. Sin embargo, si está ejecutando una prueba asíncrona, debe decirle a Mocha que la prueba es asíncrona. Hay dos maneras de hacer esto:

  1. Declare que la función anónima que le pasa toma un parámetro. Mocha llamará a su función anónima con un solo parámetro que es una función a la que debe llamar para indicar que su prueba ha terminado. (Este parámetro se llama done debido a la tradición. Podría llamarlo complete , cb o platypus y funcionaría igual.) Si done llamado sin un valor, la prueba es exitosa. Con un valor, la prueba es una falla y el valor debe ser un objeto Error o un objeto derivado de Error .

  2. Devuelva una promesa: Mocha esperará a que la promesa sea resuelta o rechazada. Si se resuelve, la prueba es exitosa. Si es rechazado, la prueba falló.

El código que ves cuando done.toString() es solo el código de la función que Mocha pasa a tu prueba cuando declaras que toma un parámetro. Puede ver en él algo de lo que mencioné anteriormente (por ejemplo, si pasa un parámetro para done , debería ser un Error o derivarse de un Error ). El done es que hay otra función done que es privada para Mocha.


Todos los casos de prueba, incluidos antes de (), después de (), antes de Cada (), después de Cada (), deben finalizar () al final para decirle a mocha que todas las tareas se han completado.

Si falta done (), se producirá una excepción de tiempo de espera porque mocha esperará a "done ()" hasta que finalice el tiempo de espera.