Perché sto ricevendo “Errore: il metodo di risoluzione è overspecified”?

Dopo l’aggiornamento, Mocha non può nemmeno eseguire un semplice test qui è il codice

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

Ho preso questo codice da qui

Ho capito che ora lancia un’eccezione 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.

Ma come farlo funzionare? Non ho capito. io ho

 node -v 6.9.4 mocha -v 3.2.0 

Come eseguire questo codice ora sono in un formato nuovo e corretto?

Basta cadere
.then(done); e sostituisci la function(done) con la function()

Stai restituendo una Promessa, in modo che la chiamata effettuata sia ridondante come si dice nel messaggio di errore

Nelle versioni più vecchie dovevi usare la callback in caso di metodi asincroni del genere

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

Ora hai un’alternativa di restituire una promise

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

Ma usare entrambi è fuorviante (si veda ad esempio https://github.com/mochajs/mocha/issues/2407 )

Mocha consente di utilizzare una callback:

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

O restituire una promise:

 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); }); 

Non puoi fare entrambe le cose.