2013-04-12 41 views
3

應該如何處理由should.js(或node.js)失敗斷言拋出的未捕獲異常,並在斷言失敗的同一個函數/塊上繼續執行?如何處理should.js聲明錯誤

我嘗試在try/catch中包裝斷言,但它似乎仍然繼續process.on('uncaughtexception')。

最後,在生產代碼中使用斷言來驗證對象 屬性是否是一種很好的做法和性能?

謝謝!

回答

0

正如documentation所述,Node的assert基本上是用於單元測試的。因此我不會在生產代碼中使用它。我更喜歡單元測試,以確保在幾種情況下斷言是真實的。

但是,我認爲你在這裏使用了一個錯誤的方式斷言:如果一個斷言失敗了某件事情是錯誤的。您的應用處於某種未知狀態。

如果您對某些無效對象有某種處理方式assert不是正確的工具:據我瞭解您的用例,您並不真正需要一個對象是有效的,但如果它不是。這是一個簡單的條件,而不是一個斷言。

+0

謝謝,它是有道理的。我使用should.js來驗證對象的原因是它具有相當的描述性,我可以從單元測試中重新使用代碼。 – dublx

0

嗨@dublx我認爲在生產代碼中使用斷言是完全有效的用例。例如。如果你依靠一個你知道以某種方式行事的外部API。這個API可能會突然改變並破壞你的代碼。如果斷言會檢測到API發生了變化,並且您將得到一封自動電子郵件,那麼即使您的客戶不知道該中斷,也可以對其進行修復。

這就是說我推薦assume.js,它解決了你的問題。即使表現也非常出色:一個斷言只吃17μs或0.017ms。