前陣子同事改完API server,local跑完測試沒問題後便推上CI/CD,沒想到mocha跑完測項卻沒正常結束而hang住。
檢查了環境(node版本,package)都沒差異後,另一位同事找到async hooks來偵錯
此手法利用async_hooks
建立hook監聽非同步事件的生命週期
在範例中,將async hook抓到的error log放在mocha的after
block印出來。可以發現是該程式碼連上server server開始監聽某個port之後卻沒結束連線,造成測試過了卻停住。
同事遇到的情況也是如此,API service的測試因某些原因造成Kibana的連線沒有結束,導致測試停住。
async_hooks
在node 8以後才支援,如果要監聽非同步事件可以參考。
參考資料: NodeJS Async Hooks官方文件