Test für den zu erwartenden Ausfall in Mokka
Verwendung von Mocha, ich bin versucht zu testen, ob der Konstruktor wirft eine Fehlermeldung. Ich habe nicht in der Lage, dies zu tun mit das erwarten syntax, also würde ich gerne Folgendes tun:
it('should throw exception when instantiated', function() {
try {
new ErrorThrowingObject();
//Force the test to fail since error wasn't thrown
}
catch (error) {
//Constructor threw Error, so test succeeded.
}
}
Ist das möglich?
"Kraft mocha test-to-fail" - klingt wie Sie wollen
expect(false).to.be.true
, aber was tatsächlich diskutiert wird, sind Tests erwartet scheitern, ich habe angeforderten Titel entsprechend bearbeitet.InformationsquelleAutor bibs | 2013-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, mit Chai ist
throw
konstruieren. Zum Beispiel:mit done() übergeben Sie ein Fehler-Instanz und zwar so: fertig(new Error()), ohne die "fertig ()" - callback, wirft man nur einen Fehler, anstatt einen Fehler
InformationsquelleAutor Mark F
should.js
Mithilfe der should.js Bibliothek mit sollte.scheitern
Alternative, die Sie verwenden können, der sollte throwError
Chai
Und mit chai mit dem werfen api
Das erwarten(wirft) ruft immer die
throws
Funktion ohne Argumente. In Ihrem Fall könnten Sie entweder ändern Sie die throwsWithNoArgs Körper, eine andere Funktion aufrufen mit den falschen paramemers. Alternativ könnte man bindenexpect(throwsWithIncorrectArgs.bind(null, x1, x2)).to.throw(Error)
InformationsquelleAutor Noah
Chai hat jetzt
should.fail()
undexpect.fail()
https://github.com/chaijs/chai/releases/tag/2.1.0
expect.fail()
, NICHTexpect.to.fail()
. Ich werde Bearbeiten..ähm... entweder ich denke? ... kann man den stick in "zu" in die Kette, wenn Sie wollen, und Ihre weitere grammatische so, das ist der Grund, warum die kleinen Worte ("Die folgende werden als verkettbare Getter zur Verbesserung der Lesbarkeit Ihrer Behauptungen. Sie bieten keine Testmöglichkeiten, es sei denn, Sie haben überschrieben wurde durch ein plugin.")
expect.fail
ist die einzige statische Methodeexpect
wie Sie sehen können hier. Gibt es keine statischen verkettbare Getter..expect.to
nicht vorhanden ist (aberexpect(...).to
vorhanden)Ah-sorry... (ich bin ein gebürtiger "sollte" Benutzer). Tks für die Korrektur!
InformationsquelleAutor shaunc
2017 beantworten, wenn Sie brauchen, um dies zu tun mit async-code: mit warten und nicht erst irgendwelche anderen Bibliotheken.
Hinweis: das poster war nur sync-code, aber ich erwarte eine Menge von Menschen, die mit async waren, führte hier durch das Frage-Titel!
try
, setzen Sie einfach die assert-code infinally
.Sicher vereinbart ist, die Frage Fragesteller fragte, über einige sync-code, aber der Titel "Test für den zu erwartenden Ausfall in mocha' hat Blei eine ganze Reihe von Leuten hier, die testen müssen, die die Mehrheit der JS-code, dh asynchron, daher die upvotes.
Das ist fair, vielleicht ein downvote war ein wenig hart. Denke immer noch, die Antwort wäre nützlicher, wenn klar gemacht, dass
await
hilft nur bei asynchronen tests. Abstimmung ist gesperrt, bis die Antwort bearbeitet wird, aber ich bin bereit, es zu ändernfair genug, bearbeitet ?
InformationsquelleAutor mikemaccana
Mokka in Verzug ist mit Behaupten aus node.js (https://nodejs.org/api/assert.html). Sie brauchen keine externen Bibliotheken, um zu überprüfen, ob eine Methode wirft einen Fehler.
Behaupten hat Methode -
assert.throws
es hat drei Parameter, aber nur zwei wirklich wichtig hier:Nehmen wir an, Sie haben eine Funktion namens
sendMessage(message)
die wirft einen Fehler an, wenn message-parameter nicht festgelegt ist. Funktion code:Ok, also um es zu testen, müssen Sie eine zusätzliche Funktion, um cover-Eingang. Warum? Da
assert.throws
gibt keine Möglichkeit zur übergabe von Parametern an die Funktion geprüft.Also statt
müssen Sie erstellen anonyme Funktion:
Können Sie den Unterschied sehen? Statt der übergabe-Funktion direkt, ich habe die Funktion call-innere anonyme Funktion, die in Zweck ruft er mit einem vorbereiteten input.
Was ist mit dem zweiten parameter. Es hängt davon ab, welche Art von Fehler geworfen werden sollte, im obigen Beispiel
Error
Objekt geworfen wurde, so hatte ich, um esError
. Im Ergebnis dieser Aktion,assert.throws
vergleicht, wenn geworfen-Objekt ist ein Objekt des gleichen Typs. Wenn stattError
etwas anderes geworfen wird, dann ist dieser Teil geändert werden muss. Zum Beispiel, anstattError
ich werfe einen Wert vom TypString
.Nun den Testanruf
Statt
Error
im zweiten parameter, die ich verwendet haben, die Vergleich-Funktion, um vergleichen zu können geworfen Fehler mit der Erwartung.InformationsquelleAutor Maciej Sikora
MarkJ die akzeptierte Antwort ist der Weg zu gehen und viel einfacher als andere hier.
Lassen Sie mich Ihnen zeigen Beispiel in der realen Welt:
InformationsquelleAutor Andre Figueiredo
Wenn Sie should.js, die Sie tun können
(new ErrorThrowingObject).should.throw('Option Error Text or Regular Expression here')
Wenn Sie nicht wollen, sollte eine separate Bibliothek, Sie könnte auch etwas wie das hier tun:
Diese Weise wissen Sie, der Fehler abgefangen wird, wenn der test beendet. Andernfalls bekommen Sie ein timeout-Fehler.
oder Sie können einfach tun dies ErrorThrowingObject.sollte.werfen('Option Error Text oder Regulären Ausdruck, hier')
InformationsquelleAutor Max
Mit Chai
throw
(ES2016)http://chaijs.com/api/bdd/#method_throw
Für Klarheit...
Dies funktioniert
Dies nicht funktioniert
InformationsquelleAutor SandroMarques
Wenn Sie nicht möchten, wickeln Sie eine ganze Menge von Quell-in die
expect
parameter, oder wenn Sie viele Argumente übergeben werden und es wird nur hässlich, Sie kann immer noch tun Sie dies mit der original-syntax Prima durch die Nutzung derdone
argument bereitgestellt wird (aber ursprünglich wurde ignoriert):Weil man
done
hier, ermöglicht es Ihnen gehen, beliebigen code auszuführen, oben in dertry
, dann geben Sie genau, wo in Ihrer Quelle, die Sie möchten, zu erfassen den Fehler.Normalerweise, jemand könnte versucht sein, zu
throw
oderassert(false)
, aber diese beiden werden gefangen von dercatch
destry
an, und führen Sie einige meta-Prüfung, um festzustellen, ob der Fehler, den Sie erwischt wurde, den erwarteten Fehler aus dem test, oder war es die endgültige Entscheidung, dass Ihr test ist fehlgeschlagen. Das ist nur ein Durcheinander.InformationsquelleAutor Ian MacDonald