Mocha: Fehlermeldung "Fehler: Lösungsmethode ist überspezifiziert. Geben Sie einen Rückruf an *oder* geben Sie ein Versprechen zurück; nicht beides."

Erstellt am 15. März 2017  ·  6Kommentare  ·  Quelle: mochajs/mocha

Ich habe so etwas Einfaches.

` it("sollte Versprechen aufrufen", async (erledigt) => {

    const testPromise = new Promise((resolve, reject) => {

        setTimeout(() => {

            resolve("Hello World!");

        }, 200);
    });


    const result = await testPromise;

    done();

}`

Aber ich erhalte immer die Fehlermeldung "Fehler: Auflösungsmethode ist überspezifiziert. Geben Sie einen Rückruf an oder geben Sie ein Versprechen zurück; nicht beides.".

Wenn ich done() herausnehme, läuft der Test ab.

tsconfig.json
{ "compilerOptions": { "module": "commonjs", "target": "ES6", "noImplicitAny": false, "types": ["node", "mocha","supertest"], "typeRoots": [ "./node_modules/@types" ] } }
mocha.opts
--require ts-node/register --reporter dot --watch-extensions tsx,ts test/**/*.ts

faq

Hilfreichster Kommentar

schön gefunden, wie man es behebt Entfernen in der Funktion param und unten und es funktioniert. Sobald Sie den Parameter done in function eingeben, geht es drunter und drüber

Alle 6 Kommentare

schön gefunden, wie man es behebt Entfernen in der Funktion param und unten und es funktioniert. Sobald Sie den Parameter done in function eingeben, geht es drunter und drüber

Denken Sie auch daran, dass async Funktionen automatisch ein Promise zurückgeben.

scheint so lange wie Sie async , und wie @ScottFreeCode sagte, gibt es Versprechen zurück, also überspringen wir einfach den Aufruf von done() . funktioniert.

Entfernen erledigt hat bei mir funktioniert!

VOR:

image

NACH (Funktioniert!!):

image

getResponse-Funktion:

image

Ich musste das done aus dem Funktionsparameter und das done() des Funktionsaufrufs entfernen
Vor

   before(async function (done) {
        user = new User({ ...});
        await user.save();
        done()
    });

Nach

   before(async function () {
        user = new User({ ...});
        await user.save();
    });

Das funktioniert bei mir

Ich habe das gleiche Problem und muss vom Benutzer erledigt werden, weil ich testen muss, ob mein Versprechen fehlschlägt. Also fange ich es ab und rufe dann fertig auf, bekomme aber diesen Fehler.

it("...", async function (done) {
  try {
    await asyncFung(...);
    done("The call should have failed")
  } catch (error) {
    if (error instanceof MyError) {
      done()
    } else {
      done(error)
    }
  }
});
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen