Ich habe eine Datei app.coffee
:
und eine Datei namens test/taskTest.coffee
:
Wenn ich diesen Befehl im Terminal ausführen: mocha -r should --compilers coffee:coffee-script -R spec
Ich habe einen fehlgeschlagenen Test (der letzte) sagen, dass es eine Ausnahme erwartet "Abhängige Aufgabe 'Geschirr spülen' ist nicht abgeschlossen." aber wurde 'undefiniert'.
Wenn ich (-> task2.complete()).should.throw
in -> task2.complete().should.throw
ändere, indem ich die Klammern lösche, wird der Test bestanden und schlägt fehl, wenn ich die Ausnahme nicht ausspreche. Aber wenn ich die Ausnahmebedingungsnachricht in etwas zufälliges ändere, übergibt es noch. Mache ich etwas falsch? Sollte der Test nicht bestanden werden, wenn die Nachricht wörtlich "Abhängige Aufgabe 'Geschirr spülen' ist nicht abgeschlossen."?
Sie werfen eine Ausnahme mit einer Zeichenfolge, anstatt ein Fehlerobjekt zu werfen. throw()
sucht nach letzterem. Dein ursprünglicher Code funktioniert also, wenn du folgendes tust:
Wenn etwas, das Sie in CoffeeScript schreiben, Ergebnisse produziert, die keinen Sinn ergeben, versuchen Sie es mit js zu kompilieren (oder fügen Sie den Code in das CoffeeScript ein ) Werde das sehen:
%Vor%kompiliert zu:
%Vor%definiert nur eine Funktion und führt sie nicht aus. Dies erklärt, warum das Ändern der Saite keinen Unterschied macht. Ich hoffe, das hilft.
Zunächst einmal, das ist ein gut aussehendes Coffeescript.
Zweitens ist David Weldon in seiner Antwort richtig, dass Sie einfach den Wurf ändern können, um tatsächlich einen Fehler zu werfen, und es funktioniert.
Hier ist Ihr Code in eine lange Datei mit nur dem Wurf geändert.
%Vor%Mocha, dieser Bastard, und du bist gut zu gehen.
Tags und Links coffeescript node.js tdd mocha should.js