webpack4.0各個擊破(9)—— karma篇

来源:https://www.cnblogs.com/dashnowords/archive/2018/09/03/9572753.html
-Advertisement-
Play Games

作為前端最火的構建工具,是前端自動化工具鏈 最重要的部分 ,使用門檻較高。本系列是筆者自己的學習記錄,比較基礎,希望通過 問題 + 解決方式 的模式,以前端構建中遇到的具體需求為出發點,學習 工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於 ) 一. webpack與自動化測試 對應的關鍵詞 ...


webpack作為前端最火的構建工具,是前端自動化工具鏈最重要的部分,使用門檻較高。本系列是筆者自己的學習記錄,比較基礎,希望通過問題 + 解決方式的模式,以前端構建中遇到的具體需求為出發點,學習webpack工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於webpack4.0版本

一. webpack與自動化測試

webpack對應的關鍵詞是模塊化,它的主要任務就是打包和管理模塊,所以首先需要明確的概念就是webpack之所以關聯自動化測試,是因為它能夠為測試腳本提供模塊管理的能力,本質上來講,是將webpack的打包功能嵌入了自動化測試框架,而不是將自動化測試框架作為插件集成進了webpack,理解這個區別是非常關鍵的。

對於Karma+Mocha+Chai及其他自動化測試相關工具的話題將在《大前端的自動化工廠》系列博文中講述,本篇主要介紹karma-webpack連接件,它從工具實現層面上將自動化測試與自動化構建聯繫在了一起。

二. karma-webpack

插件地址:https://github.com/webpack-contrib/karma-webpack

2.1 自動化單元測試庫簡介

先對基本的單元測試工具做一個簡要說明:

  • Karma 測試框架,提供多瀏覽器環境跑單元測試的能力,包括headless瀏覽器。
  • Mocha 測試框架,提供相容瀏覽器和Node環境的單元測試能力,可使用karma-mocha集成進Karma中。
  • Chai 斷言庫,支持should,expect,assert不同類型的斷言測試函數,可使用karma-chai集成進Karma中。

大部分單元測試都是基於上述三個庫聯合使用而展開的。Karma-webpack主要提供的能力,是為Karma中載入的測試腳本提供模塊化載入的能力。

2.2 基本使用

使用yarn add karma-webpack -D進行安裝,karma.conf.js配置文件如下:

module.exports = (config) => {
  config.set({

    files: [
      // 針對test目錄下所有符合命名規範的測試文件
      { pattern: 'test/*_test.js', watched: false },
      { pattern: 'test/**/*_test.js', watched: false }
    ],

    preprocessors: {
      // 為選定腳本指定前處理器,這裡配置所有的測試腳本需要經過webpack處理
      'test/*_test.js': [ 'webpack' ],
      'test/**/*_test.js': [ 'webpack' ]
    },

    webpack: {
      // webpack配置,針對測試腳本打包的compilation配置,與項目文件打包不相關
      // 也可以引入獨立的配置文件
    },

    webpackMiddleware: {
      //如果使用了webpack-dev-server則可以傳入一些參數
      stats: 'errors-only'
    }
  })
}

這種配置中webpack會將每一個命中的文件當做是一個entry,也就是說它只會處理局部的依賴管理,這樣做的優點是可以針對部分測試腳本單獨跑單元測試,但劣勢也很明顯,就是當測試腳本數量很大且需要預設跑所有的測試用例的場景下(例如自動化流水線上自動觸發的LLT測試中)效率相對較低。

2.3 預設跑完全部測試用例的場景

針對上面的問題,webpak提供了另一種可選的處理測試腳本集的方法,很容易想象,其實就是自己新建一個entryPoint,將要跑的測試腳本全部引入,打包成一個bundle.js文件,它的優勢和劣勢和基本場景正好是相反的。

這種場景下,karma.conf.js的配置只需要針對入口文件即可:

files: [
  // only specify one entry point
  // and require all tests in there
  'test/index_test.js'
],

preprocessors: {
  // add webpack as preprocessor
  'test/index_test.js': [ 'webpack' ]
},

然後在測試文件的根目錄下新建一個入口腳本index_test.js:

// 這個配置針對的是test/**/?_test.js格式的腳本文件
const testsContext = require.context(".", true, /_test$/);
testsContext.keys().forEach(testsContext)

三. 測試報告

一般跑完單元測試,都需要輸出一份指定格式的報告,用於過後自查或問題追溯,此處需要註意的是當與webpack4.0結合使用時,karma的一些預設行為會失效(例如在控制台輸出單元測試用例和結果彙總,以及karma獨立運行時用來生成代碼覆蓋率報告插件karma-coverage也無法正常工作),在此均需要重新配置。

  • 單元測試報告

    單元測試信息無法輸出的問題,可以顯式引用插件karma-spec-reporterkarma-mocha-reporter併進行基本的配置即可。

  • 代碼覆蓋率報告

    代碼覆蓋率報告的自動生成配置較為複雜,需要依賴前端代碼覆蓋率工具istanbul並結合若幹插件才能實現。低版本的webpack可以參考karma-webpack-example這個開源項目的示例進行配置。webpack4.0以上版本可以參考下文推薦的示例。

    單元測試結果:

覆蓋率報告:

四. 配置參考

筆者提供了針對webpack4.0 + karma的自動化測試配置示例,放在了Webpack4-Karma-Mocha-Chai-Demo,有需要的小伙伴可以自行查看,如果對你有幫助,不要忘記給個Star哦~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 譯者按: 上王者算什麼?有本事刷一下你的前端技術! 原文 : "Modern Frontend Developer in 2018" 譯者 : "Fundebug" 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用於學習。 過去5年, "我" 一直作為一枚 全棧工程師 ,經 ...
  • bootstrapValidator驗證大全 添加到js上 註:以下參數上面的賦值都為預設值,不添加該參數即使用預設值 定義自定義驗證規則 該規則是拓展插件的validators方法。 我將項目中常用的方法放到了一個單獨js中,也就是上面第一步引用的自定義方法。 使用方法如下: 常用事件 1、重置某 ...
  • 作為前端最火的構建工具,是前端自動化工具鏈 最重要的部分 ,使用門檻較高。本系列是筆者自己的學習記錄,比較基礎,希望通過 問題 + 解決方式 的模式,以前端構建中遇到的具體需求為出發點,學習 工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於 ) 一. Integration 下文摘自 中文網 ...
  • 假如想統計JS中的函數執行次數最多的是哪個,執行時間最長的是哪個,該怎麼做呢? 1. 統計函數執行次數 2. 統計函數執行時間 3. 如何控制函數的調用次數 4. 如何控制函數的執行時間 一、統計函數執行次數 常規的方法可以使用 console.log 輸出來肉眼計算有多少個輸出 不過在Chrome ...
  • 摘要:使用validate.js在前端實現表單數據提交前的驗證 好久沒寫博客了,真的是罪過,以後不能這樣了,只學習不思考,學的都是白搭,希望在博客園能記錄下自己學習的點滴,雖然記錄的都是些淺顯的技術,但能起到鞏固自己和稍微幫助一下和我一樣的菜雞也是不錯的,哈哈,不好意思,閑話扯多了。 今天想把之前學 ...
  • <!DOCTYPE HTML><html><head> <title>userinfor</title></head><body> <form action="#" method="get"> <table align="center" border="1px" cellspacing="0px" ...
  • 前言 迄今為止,正兒八經的上線了真正意義上的程式,但是這個小程式卻著實不小。 之所以不小,是因為這個類似於社區的小程式,已經做了大部分都有的功能了 舉例說明,具體的一些功能點: 1、帖子列表頁面:會有的功能:滾動載入,下拉刷新等 2、發帖頁面:圖文發表,視頻上傳 3、評論頁面,圖文評論 4、帖子詳情 ...
  • 很奇怪,為什麼稍微低了一點就無法運行 解決辦法:npm install --save-dev @angular/cli@latest 重新安裝最新的版本 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...