unit test spec pruebas nodejs node node.js mocha

node.js - test - ¿Por qué me aparece el mensaje "Error: El método de resolución está sobre especificado"?



node js mocha chai (2)

Después de la actualización, Mocha ni siquiera puede ejecutar una prueba simple aquí es el código

const assert = require(''assert''); it(''should complete this test'', function (done) { return new Promise(function (resolve) { assert.ok(true); resolve(); }) .then(done); });

Tomé este código de here

Entendí que ahora se produce un Error: Resolution method is overspecified. Specify a callback * or * return a Promise; not both. excepción Error: Resolution method is overspecified. Specify a callback * or * return a Promise; not both. Error: Resolution method is overspecified. Specify a callback * or * return a Promise; not both.

¿Pero cómo hacer que funcione? No entendía. yo tengo

node -v 6.9.4 mocha -v 3.2.0

¿Cómo ejecutar este código ahora están en un formato nuevo y correcto?


Mocha permite utilizar una devolución de llamada:

it(''should complete this test'', function (done) { new Promise(function (resolve) { assert.ok(true); resolve(); }) .then(done); });

O devolver una promesa:

it(''should complete this test'', function () { return new Promise(function (resolve) { assert.ok(true); resolve(); }); }); // Or in the async manner it(''should complete this test'', async () => { await Promise.resolve(); assert.ok(true); });

No puedes hacer ambas cosas.


Solo deja caer
.then(done); y reemplazar la function(done) con la function()

Usted está devolviendo una Promesa, por lo que las llamadas realizadas son redundantes, como se indica en el mensaje de error

En las versiones anteriores tuvo que usar la devolución de llamada en caso de métodos asíncronos como ese

it (''returns async'', function(done) { callAsync() .then(function(result) { assert.ok(result); done(); }); })

Ahora tienes una alternativa de devolver una Promesa

it (''returns async'', function() { return new Promise(function (resolve) { callAsync() .then(function(result) { assert.ok(result); resolve(); }); }); })

Pero usar ambos es engañoso (vea, por ejemplo, aquí https://github.com/mochajs/mocha/issues/2407 )