2015-05-11 5 views
9

Próbuję przetestować, że mój konstruktor rzuci błąd za pomocą klejnotu Teaspoon dla Rails, z ChaiJS jako mojej biblioteki asercji.ChaiJS oczekiwać konstruktora, aby rzucić błąd

Kiedy uruchomić następujący test:

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'); 
    }); 

uzyskać ten wynik:

Usterki:

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')') 

Konstruktor rzuca błąd, ale myślę, że nie piszę test właściwie.

gdy próbuję działa expect(badConstructor()) następnie uzyskać wyjście:

Failures: 

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

Czy ma to być 'oczekiwać (badConstructor())'? tj. musisz wywołać funkcję. – Andy

+0

Po prostu próbowałem - bezskutecznie. Teraz otrzymuję kolejny błąd - dodałem go w OP. – ThomYorkkke

+0

Wygląda na to, że działa poprawnie, ponieważ "nieprawidłowa lokalizacja" jest częścią komunikatu o błędzie. Musisz to wybrać w swoim teście lub dodać do funkcji funkcję "try/catch", aby zwrócić błąd, który możesz przetestować. – Andy

Odpowiedz

21

miał ten sam problem. Zawiń konstruktora za pomocą funkcji:

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

Czuje się trochę hacky, ale z pewnością wykonuje pracę. – Connor

+0

Działa również dla mnie. @Connor z jakiegokolwiek powodu, dlaczego jest "hacky"? – JohnnyQ

+0

@JohnnyQ Chcę powiedzieć, że w tamtym czasie byłem zaznajomiony tylko z jednym z stylów asercji Chai. Prawie rok później jednak wcale nie czuć się jak w hackach. Gdybym mógł, odsuwałbym ten komentarz! – Connor

Powiązane problemy