2015-05-11 63 views
9

我想測試一下,我的構造函數會使用Teaspoon gem for Rails和ChaiJS作爲我的斷言庫來拋出一個錯誤。ChaiJS期望構造函數拋出錯

當我運行下面的測試:

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

我得到這樣的輸出:

失敗:

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

構造函數拋出的錯誤,但我想我不會寫測試正確。

當我嘗試運行expect(badConstructor())然後我得到的輸出:

Failures: 

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

它是否意味着'expect(badConstructor())'?即,您需要調用該函數。 – Andy

+0

我剛試過 - 無濟於事。現在我得到另一個錯誤輸出 - 我將它添加到OP中。 – ThomYorkkke

+0

所以它聽起來像是正常工作,因爲「無效位置」是錯誤信息的一部分。您需要在測試中選擇它,或者在函數中添加一個try/catch語句來返回可以測試的錯誤。 – Andy

回答

21

有同樣的問題。使用函數包裝您的構造函數:

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

感覺就像是一個黑客般的解決方法,但它絕對可以完成工作。 – Connor

+0

也適用於我。 @Connor爲什麼它是「哈克」? – JohnnyQ

+0

@JohnnyQ我想說的是,在那個時候,我只是熟悉Chai的斷言風格之一。然而,差不多一年後,它根本不覺得哈克。如果可以的話,我會撤銷該評論! – Connor

相關問題