2015-05-11 9 views
9

Ich versuche zu testen, dass mein Konstruktor einen Fehler mit dem Teaspoon Juwel für Rails, mit ChaiJS als meine Assertion-Bibliothek werfen wird.ChaiJS erwarten, Konstruktor zu werfen Fehler

Wenn ich den folgenden Test durchführen:

it('does not create the seat if x < 0', function() { 
    var badConstructor = function() { 
     return new Seat({ radius: 10, x: -0.1, y: 0.2, seat_number: 20, table_number: 30}); 
    }; 

    expect(badConstructor).to.throw(Error, 'Invalid location'); 
    }); 

ich diese Ausgabe:

Failures:

1) Seat does not create the seat if x < 0 
    Failure/Error: undefined is not a constructor (evaluating 'expect(badConstructor).to.throw(Error(), 'Invalid location')') 

Der Konstruktor den Fehler zu werfen, aber ich glaube ich nicht schreibe der Test richtig.

Wenn ich expect(badConstructor()) versuchen laufen dann bekomme ich die Ausgabe:

Failures: 

    1) Seat does not create the seat if x < 0 
    Failure/Error: Invalid location 
+0

Ist es gemeint, 'expect (badConstructor())'? dh Sie müssen die Funktion aufrufen. – Andy

+0

Ich habe es gerade versucht - ohne Erfolg. Jetzt bekomme ich eine weitere Fehlerausgabe - ich habe sie im OP hinzugefügt. – ThomYorkkke

+0

So klingt es wie es richtig funktioniert, da "ungültiger Ort" Teil der Fehlermeldung ist. Sie müssen das entweder in Ihrem Test aufheben oder eine "try/catch" -Anweisung in Ihre Funktion einfügen, um einen Fehler zurückzugeben, auf den Sie testen können. – Andy

Antwort

21

Hatte das gleiche Problem. Wickeln Sie Ihren Konstruktor mit einer Funktion:

var fcn = function(){new badConstructor()}; 
expect(fcn).to.throw(Error, 'Invalid location'); 
+0

Fühlt sich an wie ein hackiger Workaround, aber es wird definitiv erledigt. – Connor

+0

Funktioniert auch für mich. @Connor irgendeinen Grund, warum es "hacky" ist? – JohnnyQ

+0

@JohnnyQ Ich möchte sagen, dass ich zu der Zeit nur einen von Chais Behauptungsstilen kannte. Fast ein Jahr später fühlt es sich überhaupt nicht hacky an. Wenn ich könnte, würde ich diesen Kommentar zurückziehen! – Connor