我想測試我的過程並確保它對EPIPE錯誤有彈性,因爲我們在Prod中看到它們,並且除了缺少某些日誌記錄外,它們似乎沒有任何問題。有沒有辦法拋出像ENOENT或EPIPE這樣的系統錯誤?
if (process.env.TESTFAIL != null) {
setTimeout(function() {
throw new Error('EPIPE');
}, 1000);
}
這並沒有看起來是一樣的,雖然,一個EPIPE錯誤的樣子:
Error: write EPIPE
at errnoException (net.js:770:11)
也試過throw new Error({code: 'EPIPE', errno: -3})
等,但它只是看起來不一樣。
有沒有辦法從nodejs objects中獲取代碼/消息並拋出系統錯誤?
「瞭解瞭如何爲EPIPE做到這一點?這似乎是最有可能出現的一個藍色(寫入日誌等) – jcollum
當然。啓動一個管道到外部進程,然後當數據仍在傳輸時,用一個信號(例如'SIGINT'或'SIGKILL')殺死外部進程。與大多數單元測試相比,這是一個很難/很複雜的事情,可能屬於集成測試的標題。但是這樣做對測試'EPIPE'處理來說既是必要也是充分的。像Unix這樣的實用程序是發出無限序列的程序,可以用於這種測試。 –