為了提升研發(fā)體驗,我們提供了便捷的方式在本地進行開發(fā)、調(diào)試、單元測試等。
在這里我們需要使用到 egg-bin 模塊(只在本地開發(fā)和單元測試使用,如果線上請參考 應(yīng)用部署)。
首先,我們需要把 egg-bin 模塊作為 devDependencies 引入:
$ npm i egg-bin --save-dev |
本地啟動應(yīng)用進行開發(fā)活動,當(dāng)我們修改代碼并保存后,應(yīng)用會自動重啟實時生效。
添加 npm scripts 到 package.json:
{ |
這樣我們就可以通過 npm run dev 命令啟動應(yīng)用。
本地啟動的應(yīng)用是以 env: local 啟動的,讀取的配置也是 config.default.js 和 config.local.js 合并的結(jié)果。
本地啟動應(yīng)用默認(rèn)監(jiān)聽 7001 端口,可指定其他端口,例如:
{ |
這里主要講解工具部分的使用,更多關(guān)于單元測試的內(nèi)容請參考這里。
添加 npm scripts 到 package.json:
{ |
這樣我們就可以通過 npm test 命令運行單元測試。
測試用例執(zhí)行時,應(yīng)用是以 env: unittest 啟動的,讀取的配置也是 config.default.js 和 config.unittest.js 合并的結(jié)果。
運行 npm test 時會自動執(zhí)行 test 目錄下的以 .test.js 結(jié)尾的文件(默認(rèn) glob 匹配規(guī)則 test/**/*.test.js )。
我們在編寫用例時往往想單獨執(zhí)行正在編寫的用例,可以通過以下方式指定特定用例文件:
$ TESTS=test/x.test.js npm test |
支持 glob 規(guī)則。
Mocha 支持多種形式的 reporter,默認(rèn)使用 spec reporter。
可以手動設(shè)置 TEST_REPORTER 環(huán)境變量來指定 reporter,例如使用 dot:
$ TEST_REPORTER=dot npm test |
默認(rèn)執(zhí)行超時時間為 30 秒。我們也可以手動指定超時時間(單位毫秒),例如設(shè)置為 5 秒:
$ TEST_TIMEOUT=5000 npm test |
egg-bin test 除了環(huán)境變量方式,也支持直接傳參,支持 mocha 的所有參數(shù),參見:mocha usage 。
$ # npm 傳遞參數(shù)需額外加一個 `--`,參見 https://docs.npmjs.com/cli/run-script |
egg-bin 已經(jīng)內(nèi)置了 nyc 來支持單元測試自動生成代碼覆蓋率報告。
添加 npm scripts 到 package.json:
{ |
這樣我們就可以通過 npm run cov 命令運行單元測試覆蓋率。
$ egg-bin cov |
還可以通過 open coverage/lcov-report/index.html 打開完整的 HTML 覆蓋率報告。
和 test 命令一樣,cov 命令執(zhí)行時,應(yīng)用也是以 env: unittest 啟動的,讀取的配置也是 config.default.js 和 config.unittest.js 合并的結(jié)果。
對于某些不需要跑測試覆蓋率的文件,可以通過 COV_EXCLUDES 環(huán)境變量指定:
$ COV_EXCLUDES=app/plugins/c* npm run cov |
框架內(nèi)置了日志 功能,使用 logger.debug() 輸出調(diào)試信息,推薦在應(yīng)用代碼中使用它。
// controller |
通過 config.logger.level 來配置打印到文件的日志級別,通過 config.logger.consoleLevel 配置打印到終端的日志級別。
debug 模塊是 Node.js 社區(qū)廣泛使用的 debug 工具,很多模塊都使用它模塊打印調(diào)試信息,Egg 社區(qū)也廣泛采用這一機制打印 debug 信息,推薦在框架和插件開發(fā)中使用它。
我們可以通過 DEBUG 環(huán)境變量選擇開啟指定的調(diào)試代碼,方便觀測執(zhí)行過程。
(調(diào)試模塊和日志模塊不要混淆,而且日志模塊也有很多功能,這里所說的日志都是調(diào)試信息。)
開啟所有模塊的日志:
$ DEBUG=* npm run dev |
開啟指定模塊的日志:
$ DEBUG=egg* npm run dev |
單元測試也可以用 DEBUG=* npm test 來查看測試用例運行的詳細(xì)日志。
添加 npm scripts 到 package.json:
{ |
這樣我們就可以通過 npm run debug 命令來斷點調(diào)試應(yīng)用。
egg-bin 會智能選擇調(diào)試協(xié)議,在 8.x 之后版本使用 Inspector Protocol 協(xié)議,低版本使用 Legacy Protocol。
同時也支持自定義調(diào)試參數(shù):
$ egg-bin debug --inpsect=9229 |
執(zhí)行 debug 命令時,應(yīng)用也是以 env: local 啟動的,讀取的配置是 config.default.js 和 config.local.js 合并的結(jié)果。
最新的 DevTools 只支持 Inspector Protocol 協(xié)議,故你需要使用 Node.js 8.x+ 的版本方能使用。
執(zhí)行 npm run debug 啟動:
? showcase git:(master) ? npm run debug |
然后選擇以下一種方式即可:
egg-bin 會自動讀取 WebStorm 調(diào)試模式下設(shè)置的環(huán)境變量 $NODE_DEBUG_OPTION。
使用 WebStorm 的 npm 調(diào)試啟動即可:
可以通過 2 個方式:
方式一:開啟 VSCode 配置 Debug: Toggle Auto Attach,然后在 Terminal 執(zhí)行 npm run debug 即可。
方式二:配置 VSCode 的 .vscode/launch.json,然后 F5 一鍵啟動即可。(注意,需要關(guān)閉方式一中的配置)
// .vscode/launch.json |
我們也提供了一個 vscode-eggjs 擴展來自動生成配置。
更多 VSCode Debug 用法可以參見文檔: Node.js Debugging in VS Code
如果想了解更多本地開發(fā)相關(guān)的內(nèi)容,例如為你的團隊定制一個本地開發(fā)工具,請參考 egg-bin。
更多建議: