摘要:有質量的代碼是要有代碼測試來保證的,本文就大致談談現在我們是如何實現使用甚至標準的代碼的高效測試的。每次代碼修改頁面都會自動刷新,更強大的是它只會執行你修改了代碼的測試用例簡直神器。
有質量的代碼是要有代碼測試來保證的,本文就大致談談現在我們是如何實現使用es6甚至es7(async/await)標準的JS代碼的高效測試的。
我們會用到以下工具
webpack 前端打包工具
mocha 測試框架
babel 編譯es6/7代碼
karma 命令行下執行瀏覽器測試
istanbul 代碼覆蓋率工具
coveralls 代碼覆蓋統計服務商
travis-ci 自動集成
安裝mocha
npm i -D mocha
代碼沒有后端依賴可直接測試:
mocha test.js
使用瀏覽器/node不支持的es6需要babel來編譯代碼
npm i babel -D
啟用es6,這種方式新版本的babel會自動啟動async/await
mocha --compilers js:babel/register test.js
如果用到了前端的代碼,就需要webpack這樣的工具
npm i webpack mocha-loader -D webpack "mocha!./test.js" testBundle.js //index.html 包含 testBUndle.js open index.html
需要babel和webpack一起使用的話,先裝loader
npm i babel-loader -D
命令行的 babel-loader 只會編譯當前的文件,如需編譯其它文件需要在 require 處添加才能編譯成功,如果需要啟用 async/await 還需要加入 runtime 選項,例如:
require("babel?optional[]=runtime!./index.js")
如果每次require都去加就顯得太繁瑣了,所以建議使用 webpack.config.js 添加
module.exports = { module: { loaders: [ { test: /.js$/, exclude: /node_modules/, loader: "babel-loader?optional[]=runtime" } ] } }
到 webpack.config.js, 現在可以在命令行和require上省去babel了。
這種方式每次修改都要手動去編譯再刷新瀏覽器,比較繁瑣,所以推薦使用webpack-dev-server實時調試。
npm i webpack-dev-server -D webpack-dev-server "mocha!./test.js" --hot --inline --output-filename test.js open http://localhost:8080/test
每次代碼修改頁面都會自動刷新,更強大的是它只會執行你修改了代碼的測試用例 (簡直神器)。
現在可以用瀏覽器測試我們的es6代碼了,下一步是在命令行也能測試瀏覽器跑的代碼,這里我們用 karma 以啟用 firefox 為例,安裝依賴:
npm i -D karma karma-cli karma-firefox-launcher karma-mocha karma-webpack
然后在 karma.conf.js 文件中加入:
// Karma configuration module.exports = function (config) { config.set({ basePath: "", frameworks: ["mocha"], files: [ "test/test.js" ], exclude: [ ], preprocessors: { "test/test.js": ["webpack"] }, reporters: ["progress"], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: false, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ["Firefox"], webpack: { module: { loaders: [ { test: /.js$/, exclude: /node_modules/, loader: "babel-loader?optional[]=runtime" } ] } }, webpackMiddleware: { noInfo: true }, singleRun: true }) }
執行
./node_modules/.bin/karma start
開始測試
光有測試還不足以讓你信服你的代碼,我們還需要測試覆蓋,這里以使用 istanbul 為例:
npm i -D istanbul babel-istanbul-instrumenter-loader karma-coverage
修改 karma.conf.js
... reporters: ["progress", "coverage"] ... webpack: { module: { loaders: [ { test: /.js$/, exclude: /node_modules/, loader: "babel-loader?optional[]=runtime" } ], preLoaders: [ // instrument only testing sources with Istanbul { test: /.js$/, include: path.resolve("lib/"), loader: "babel-istanbul-instrumenter" } ] } } .... coverageReporter: { dir: "coverage/", reporters: [ {type: text} { type: "html", subdir: "html" }, { type: "lcovonly", subdir: "lcov" }, { type: "cobertura", subdir: "cobertura" } ] }
這里生成了3中報告,html是給人看的(瀏覽器打開 coverage/html/index.html 可以直接查看),另外兩種便于其它的工具分析。
以上工具的用法搭配多樣,這里只是粗淺介紹,真正使用請認真閱讀相關文檔。
最后是如何持續集成,ravis-ci 和 coveralls.io 可以很好的合作解決這個問題。
你需要先到 travis-ci 注冊,然后通過 github 授權,啟用相關的項目。在項目中添加 .travis.yml 配置文件
language: node_js node_js: - "0.12" before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start
推送到 github 之后,每次提交 travis-ci 都會先執行 npm install 然后執行 npm test 中的命令進行測試 (還有其它自定義的設置,本文略過)
使用 coveralls.io 需要先安裝一個包來發送數據
npm i -D coveralls
然后也是注冊、授權、啟用相關項目,最后是做一個測試命令把測試報告發給它,以 Makefile 為例:
test-coveralls: @echo TRAVIS_JOB_ID $(TRAVIS_JOB_ID) @node_modules/.bin/karma start --single-run && cat ./coverage/lcov/lcov.info | ./node_modules/coveralls/bin/coveralls.js
修改package.json的測試命令
scripts: { test: make test-coveralls }
這樣 travis-ci 每次執行完測試都會把 lcov.info 里的測試結果通過 coveralls.js 發送給 coveralls.io 網站。
做為示范,這是一個現實的組件項目 chemzqm/exgrid,還有一個樣板項目 chemzqm/es6-test-sample。
做為一個有追求的開發者,向著100%的覆蓋率努力吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91540.html
摘要:有質量的代碼是要有代碼測試來保證的,本文就大致談談現在我們是如何實現使用甚至標準的代碼的高效測試的。每次代碼修改頁面都會自動刷新,更強大的是它只會執行你修改了代碼的測試用例簡直神器。 有質量的代碼是要有代碼測試來保證的,本文就大致談談現在我們是如何實現使用es6甚至es7(async/await)標準的JS代碼的高效測試的。 我們會用到以下工具 webpack 前端打包工具 moch...
摘要:什么是單頁面應用單頁面應用是指用戶在瀏覽器加載單一的頁面,后續請求都無需再離開此頁目標旨在用為用戶提供了更接近本地移動或桌面應用程序的體驗。流程第一次請求時,將導航頁傳輸到客戶端,其余請求通過獲取數據實現數據的傳輸通過或遠程過程調用。 什么是單頁面應用(SPA)? 單頁面應用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,后續請求都無需再離開此頁 目標:旨在用為用戶提供了更接近本地...
摘要:什么是單頁面應用單頁面應用是指用戶在瀏覽器加載單一的頁面,后續請求都無需再離開此頁目標旨在用為用戶提供了更接近本地移動或桌面應用程序的體驗。流程第一次請求時,將導航頁傳輸到客戶端,其余請求通過獲取數據實現數據的傳輸通過或遠程過程調用。 什么是單頁面應用(SPA)? 單頁面應用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,后續請求都無需再離開此頁 目標:旨在用為用戶提供了更接近本地...
閱讀 1029·2023-04-26 02:26
閱讀 2134·2021-09-26 10:16
閱讀 1544·2019-08-30 12:57
閱讀 3461·2019-08-29 16:10
閱讀 3214·2019-08-29 13:47
閱讀 1182·2019-08-29 13:12
閱讀 2135·2019-08-29 11:11
閱讀 1330·2019-08-26 13:28