Alex Liang

Mocha跑測試時hang住的偵錯方法

前陣子同事改完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官方文件