成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

現(xiàn)代JS代碼測試流程

cyqian / 567人閱讀

摘要:有質(zhì)量的代碼是要有代碼測試來保證的,本文就大致談?wù)劕F(xiàn)在我們是如何實現(xiàn)使用甚至標準的代碼的高效測試的。每次代碼修改頁面都會自動刷新,更強大的是它只會執(zhí)行你修改了代碼的測試用例簡直神器。

有質(zhì)量的代碼是要有代碼測試來保證的,本文就大致談?wù)劕F(xiàn)在我們是如何實現(xiàn)使用es6甚至es7(async/await)標準的JS代碼的高效測試的。

我們會用到以下工具

webpack 前端打包工具

mocha 測試框架

babel 編譯es6/7代碼

karma 命令行下執(zhí)行瀏覽器測試

istanbul 代碼覆蓋率工具

coveralls 代碼覆蓋統(tǒng)計服務(wù)商

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, 現(xiàn)在可以在命令行和require上省去babel了。

這種方式每次修改都要手動去編譯再刷新瀏覽器,比較繁瑣,所以推薦使用webpack-dev-server實時調(diào)試。

npm i webpack-dev-server -D
webpack-dev-server "mocha!./test.js" --hot --inline --output-filename test.js
open http://localhost:8080/test

每次代碼修改頁面都會自動刷新,更強大的是它只會執(zhí)行你修改了代碼的測試用例 (簡直神器)。

現(xiàn)在可以用瀏覽器測試我們的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
  })
}

執(zhí)行

./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 可以直接查看),另外兩種便于其它的工具分析。

以上工具的用法搭配多樣,這里只是粗淺介紹,真正使用請認真閱讀相關(guān)文檔。

最后是如何持續(xù)集成,ravis-ci 和 coveralls.io 可以很好的合作解決這個問題。

你需要先到 travis-ci 注冊,然后通過 github 授權(quán),啟用相關(guān)的項目。在項目中添加 .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 都會先執(zhí)行 npm install 然后執(zhí)行 npm test 中的命令進行測試 (還有其它自定義的設(shè)置,本文略過)

使用 coveralls.io 需要先安裝一個包來發(fā)送數(shù)據(jù)

npm i -D coveralls

然后也是注冊、授權(quán)、啟用相關(guān)項目,最后是做一個測試命令把測試報告發(fā)給它,以 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 每次執(zhí)行完測試都會把 lcov.info 里的測試結(jié)果通過 coveralls.js 發(fā)送給 coveralls.io 網(wǎng)站。

做為示范,這是一個現(xiàn)實的組件項目 chemzqm/exgrid,還有一個樣板項目 chemzqm/es6-test-sample。

做為一個有追求的開發(fā)者,向著100%的覆蓋率努力吧!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91540.html

相關(guān)文章

  • 現(xiàn)代JS代碼測試流程

    摘要:有質(zhì)量的代碼是要有代碼測試來保證的,本文就大致談?wù)劕F(xiàn)在我們是如何實現(xiàn)使用甚至標準的代碼的高效測試的。每次代碼修改頁面都會自動刷新,更強大的是它只會執(zhí)行你修改了代碼的測試用例簡直神器。 有質(zhì)量的代碼是要有代碼測試來保證的,本文就大致談?wù)劕F(xiàn)在我們是如何實現(xiàn)使用es6甚至es7(async/await)標準的JS代碼的高效測試的。 我們會用到以下工具 webpack 前端打包工具 moch...

    supernavy 評論0 收藏0
  • 前端面試題(3)現(xiàn)代技術(shù)

    摘要:什么是單頁面應(yīng)用單頁面應(yīng)用是指用戶在瀏覽器加載單一的頁面,后續(xù)請求都無需再離開此頁目標旨在用為用戶提供了更接近本地移動或桌面應(yīng)用程序的體驗。流程第一次請求時,將導航頁傳輸?shù)娇蛻舳?,其余請求通過獲取數(shù)據(jù)實現(xiàn)數(shù)據(jù)的傳輸通過或遠程過程調(diào)用。 什么是單頁面應(yīng)用(SPA)? 單頁面應(yīng)用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,后續(xù)請求都無需再離開此頁 目標:旨在用為用戶提供了更接近本地...

    EasonTyler 評論0 收藏0
  • 前端面試題(3)現(xiàn)代技術(shù)

    摘要:什么是單頁面應(yīng)用單頁面應(yīng)用是指用戶在瀏覽器加載單一的頁面,后續(xù)請求都無需再離開此頁目標旨在用為用戶提供了更接近本地移動或桌面應(yīng)用程序的體驗。流程第一次請求時,將導航頁傳輸?shù)娇蛻舳耍溆嗾埱笸ㄟ^獲取數(shù)據(jù)實現(xiàn)數(shù)據(jù)的傳輸通過或遠程過程調(diào)用。 什么是單頁面應(yīng)用(SPA)? 單頁面應(yīng)用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,后續(xù)請求都無需再離開此頁 目標:旨在用為用戶提供了更接近本地...

    trigkit4 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<