Tut Jasmine toThrow matcher erfordern das argument zu sein, eingehüllt in eine anonyme Funktion?
In der Dokumentation bei https://github.com/pivotal/jasmine/wiki/Matchersdas Folgendes umfasst:
expect(function(){fn();}).toThrow(e);
Diskutiert, wie in diese Fragedie folgenden nicht nicht arbeiten, weil wir wollen, eine function-Objekt, um expect
eher als das Ergebnis des Aufrufs fn()
expect(fn()).toThrow(e);
Frage 1: Muss für die folgenden arbeiten?
expect(fn).toThrow(e);
Frage 2: Wenn ich ein Objekt thing
mit einer Methode doIt
wird Folgendes funktionieren?
expect(thing.doIt).toThrow(e);
(2a: wenn ja, gibt es eine Möglichkeit, Argumente an die doIt
Methode?)
Empirisch die Antwort scheint ja zu sein, aber ich vertraue nicht meinem Verständnis von js scoping genug, um sicher zu sein.
Dank!
InformationsquelleAutor der Frage brahn | 2012-02-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können wir tun, Weg mit der anonymen Funktion wrapper mithilfe
Function.bind
wurde in ECMAScript 5. Dies funktioniert in den neuesten Versionen der Browser, und Sie können mit dem patch älteren Browsern durch die Definition der Funktion selbst. Eine Beispiel-definition ist am Mozilla Developer Network.Hier ist ein Beispiel, wie
bind
kann verwendet werden, mit Jasmin.Erstes argument bereitgestellt, um
bind
alsthis
variable, wennf
genannt wird. Alle zusätzlichen Argumente werden übergebenf
wenn er aufgerufen wird. Hier2
weitergegeben wird, wie seine erste und einzige argument.InformationsquelleAutor der Antwort Danyal Aytekin
Werfen wir einen Blick auf die Jasmin-Quelltext:
Dies ist der wesentliche Teil der
toThrow
Methode. Also alle die Methode tut, ist, führen Sie die Methode, die Sie wollen, zu erwarten und zu prüfen, ob eine exception geworfen wurde. Also in deinem Beispielefn
oderthing.doIt
aufgerufen werden, in der Jasmine wird prüfen, ob ein Fehler ausgegeben wurde, und wenn die Art dieser Fehler ist, den Sie ging intoThrow
.InformationsquelleAutor der Antwort Andreas Köberle
Leider scheint es, dass, wenn ich brauche zum testen einer Funktion, die Parameter benötigt, dann muss ich wickeln Sie es mit einer Funktion.
Ich würde eher das Sie bevorzugt haben,
Aber ich bin ok mit explizit tun
FYI beachten Sie, dass können wir auch die regex-match auf Fehler:
InformationsquelleAutor der Antwort Ustaman Sangat
Wenn es wird wie folgt verwendet:
expect(myTestFunction(arg)).toThrowAnyError(); //incorrect
Dann die Funktion
myTestFunction(arg)
wird ausgeführt, bevorexpect(...)
und eine Ausnahme werfen, bevor Jasmin hat keine chance, etwas zu tun und es stürzt ab, der test, was eine automatische Störungsmeldung.Wenn die Funktion
myTestFunction(arg)
nicht werfen alles, was (D. H. der code nicht wie erwartet funktioniert), dann Jasmin würde nur die Ergebnis der Funktion und schauen Sie, dass für Fehler - was ist falsch.Um dies zu beheben, den code, der erwartet wird ein Fehler ausgelöst werden soll, verpackt in eine Funktion. Dies wird an Jasmin, die es ausführen, und überprüfen Sie die erwartete Ausnahme.
expect(() => myTestFunction(arg)).toThrowAnyError(); //correct
InformationsquelleAutor der Antwort Neovibrant