2017-10-19 52 views
0

我正在使用assert模塊來引發前提條件錯誤。在我看來,根據documentationassert.fail(message)應該拋出一個異常,其中message屬性只是傳入的消息。但是,它被設置爲任何消息被包裝在單引號中,然後是undefined undefined意外的結果來自assert.fail

這是我使用的版本assert中的一個錯誤(1.4.1),這是文檔中的錯誤還是我的理解錯誤?

我的代碼:

$ cat assert-test.js 
assert = require ("assert") 

try { 
    assert.fail("boom") 
} 
catch (ex) { 
    console.log(ex) 
} 

$ node assert-test.js 
{ [AssertionError: 'boom' undefined undefined] 
    name: 'AssertionError', 
    actual: 'boom', 
    expected: undefined, 
    operator: undefined, 
    message: '\'boom\' undefined undefined', 
    generatedMessage: true } 

這是一個似乎與我有關的文件的一部分。

如果只提供的消息將作爲錯誤信息,其他參數將被存儲爲拋出的對象

這似乎也是相關的屬性。

注意:最後兩種情況是否是實際的,預期的,操作員對錯誤消息沒有影響。

assert.fail(); // AssertionError [ERR_ASSERTION]: Failed 

assert.fail('boom'); // AssertionError [ERR_ASSERTION]: boom 

assert.fail('a', 'b'); // AssertionError [ERR_ASSERTION]: 'a' != 'b' 

回答

1

我有點好奇,因爲我不知道,因爲assertassert訴1.4.1的意思是標準節點庫的一部分。

它看起來像你使用這個:https://www.npmjs.com/package/assert而不是實際的節點版本 - 我假設你這樣做,因爲你想在瀏覽器或其他東西中使用它。

縱觀their source code,很顯然他們並沒有試圖模仿當前節點的行爲,而是隻打印actualexpected的級聯時message不作爲第三個參數assert.fail()提供。我不知道這是一個錯誤,是故意的,還是僅僅落後於當前版本的Node(雖然他們的測試失敗讓我感到疑惑)。但是你是正確的,這個模塊的行爲與當前的Node文檔不同步,至少在第8.6.0版中,這個文檔對我來說是有效的。

+0

我是新來的Node。我誤解了我正在使用的內容,儘管我確實希望在瀏覽器(實際上是Electron)以及後端中使用它。我也一直在討論源代碼,並且轉過身來期待我用來*標準的'assert'。它看起來像'require('assert')'應該沒有安裝任何東西,但是。 我正在學習技術堆棧,對我的部分項目進行隔離,目前正在編寫單元測試。我無法弄清楚爲什麼我的'assert.fail'異常信息總是錯誤的。 感謝您的回答! –