gewusst wie: übergeben Sie einen test mit expect.js async-done() zu nehmen, ein Fehler?
Mokka-website heißt es:
"Um die Dinge noch einfacher, die done () - callback akzeptiert einen Fehler, so wir können diese direkt: [siehe Ihr Beispiel]"
So probieren, dass:
it('works',function(done){
expect(1).to.be(1)
done( new Error('expected error') )
})
/* Insert the error manually for testing and clarity. */
führen Sie es aus und:
1 failing
1) works:
Error: expected error
at Context.<anonymous>
[stack trace]
Wie machen wir die Prüfung, wenn der Fehler-Reaktion ist das gewünschte Ergebnis?
- Ich bin damit einverstanden, dies wäre der intuitive Weg, es zu tun
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht async. Die callback-Funktion ist nur für dich da zu informieren, mocha, dass Sie das testen von asynchronen code und so mocha sollte nicht führen Sie den nächsten test, bis Sie den Anruf der callback-Funktion. Dies ist ein Beispiel für die Verwendung der callback-Funktion:
Auch, mocha behandelt nicht jede form von Ausnahmen, async oder sonst. Es Blätter, die bis auf eine Ausnahme-Bibliothek Ihrer Wahl. In deinem Fall bist du mit
expect.js
? Wenn dem so ist, erwarten Griffe erwartete Fehler über diethrowException
- Methode (auch genanntthrowError
):Nun, allgemein async-code in node.js nicht werfen Fehler. Sie passieren Fehler, die an den callback als Parameter statt. So Griff async Fehler Sie können einfach überprüfen Sie das err-Objekt:
So verwenden
to.throwError()
wenn Sie überprüft haben, synchrone Fehler undto.be.an(Error)
wenn Sie überprüft haben, async Fehler.Zusätzliche Hinweise:
Das erste mal ich dieses sah, war ich etwas verblüfft. Wie kann mocha wissen, dass der test synchron oder asynchron, wenn der einzige Unterschied ist noch, ob die Funktion übergeben Sie es akzeptiert ein argument oder nicht? Im Falle, du bist wie ich und sind am Kopf kratzen, Frage mich, wie habe ich gelernt, dass alle Funktionen in javascript haben eine
length
Eigenschaft, die beschreibt, wie viele Argumente er akzeptiert in seiner Erklärung. Nein, nicht diearguments.length
Sache, die Funktion, die eigenenlength
. Zum Beispiel:Also Mokka im Grunde prüft die Funktion Länge, um zu bestimmen, Wetter zu behandeln, als eine synchrone Funktion oder asynchrone Funktion und unterbricht die Ausführung warten für die
done()
Rückruf wenn es asynchron.Noch mehr zusätzliche Hinweise:
Mocha, wie die meisten anderen js unit-test-Runner und Bibliotheken, Arbeit durch abfangen von Fehlern. So rechnet es sich, Funktionen wie
expect(foo).to.be.an.integer()
einen Fehler auslösen, wenn die assertion fehlschlägt. Das ist, wie Mokka kommuniziert mit assertion-Bibliotheken wie erwartet oder chai.Nun, wie ich oben erwähnte, ist eine gemeinsame Redewendung in Knoten ist, dass async-Funktionen werfen Sie nicht die Fehler, sondern übergibt ein Fehler-Objekt als erstes argument. Wenn dies geschieht, Mokka kann nicht erkennen, die Fehler und so nicht erkennen kann, einen fehlerhaften test. Der work-around ist, dass wenn du an das error-Objekt aus, das async-code der callback-Funktion, die es zu behandeln, wird es das gleiche wie ein Fehler geworfen.
Also, eines meiner Beispiele oben:
Oder einfach:
Streng genommen, ist diese Funktion ein wenig überflüssig, wenn verwendet mit Bibliotheken wie expect.js die können Sie manuell überprüfen Sie die error-Objekt zurückgegeben, aber es ist nützlich, wenn Sie Ihre Behauptung Bibliothek kann nicht überprüfen Sie das error-Objekt (oder, wenn Sie nicht wirklich über das Ergebnis der asynchronen Funktion, sondern wollen einfach nur, um zu wissen, dass keine Fehler geworfen).
done
dann wird es interpretieren es so ein Fehler wie Fehler geworfen. Ich werde zu erweitern meine Antwort..fs.readFile(filename, done)
.Können Sie auch wieder Ihre async wie Versprechen.