karma使用webpack的代码覆盖率测试

2023-11-17

前言

  • 距离上一次博客有2个月了,倒不是没有可写东西就是提不起劲写。

  • 不说这些了这次写下我使用 karma + webpack 中遇到的代码覆盖率问题。

一、karma的使用

自个去搜吧,感觉讲这个的真的多。我就说一些建议。

  • karma的测试框架改用mocha这样对于一个需要nodejs, browser测试的测试用例可以共用。具体的可以看我的 marked-zm

二、karma + webpack 的使用

依旧是很多人写过了,但是还是写下吧。

配置karma + webpack

  • 需要的 npm 包

npm i karma karma-mocha karma-phantomjs-launcher karma-sinon-chai /
karma-spec-reporter karma-webpack mocha sinon sinon-chai -D
  • package.json

{
    "scripts": {
        "karma-run": "karma run",
        "karma-start": "karma start test/unit/karma.conf.js",
        "karma-single": "karma start test/unit/karma.conf.js --single-run"
    }
}
  • test/unit/karma.conf.js

module.exports = function(config) {
    config.set({
        webpack: {
            devtool: 'inline-source-map', // 推荐使用inline-source-map
            module: {
                rules: [/* loaders */]
            }
        },
        frameworks: ['mocha', 'sinon-chai'], // 测试框架随便一定要要和我一样
        files: [
            './index.js' // 推荐使用一个入口来导入所有的测试。
        ],
        preprocessors: {
            './index.js': ['webpack'] // 使用什么配置
        },
        reporters: ['spec'], // spec显示插件
        port: 9876, // 端口
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: false,
        browsers: ['PhantomJS'],
        singleRun: false
    })
}
  • test/unit/index.js

 // 动态加载所有测试文件
const testsContext = require.context('./specs', true, /\.spec$/)
testsContext.keys().forEach(testsContext)
  • test/unit/specs/test.spec.js

describe('Test', function() {
    it('test 1+1', function () {
        expect(1 + 1).to.equal(2)
    })
})

运行karma + webapck测试

# 开启 karma 动态构建
npm run karma-start
# new shell,运行一次测试
npm run karma-run

或者直接单次构建并测试

npm run karma-single

三、karma + webpack 的代码覆盖率测试

这里如果直接用 karma-coverage 会出现直接对 karma 配置中入口文件生成的 webpack 代码的代码覆盖率测试。会出现很多 webpack 生成的额外代码。

而且也不是源代码的代码覆盖率测试。

这里有两个方案:

  1. karma-coverage + isparta-loader
    来自 element-ui 然后去看 isparta-loader 发觉作者已经废弃推荐换到 istanbul-instrumenter-loader 所以这个我也不用了,直接看另一个方案吧。

  2. karma-coverage-istanbul-reporter + istanbul-instrumenter-loader
    这两个包除了 README 的说明没有找到更多的资料,只好自己试着用,下面直接看如何使用吧。

配置 karma + webpack 的代码覆盖率测试

  • 需要的其它 npm 包

npm i karma-coverage-istanbul-reporter istanbul-instrumenter-loader -D
  • test/unit/karma.conf.js

const path = require('path')
const srcPath = path.resolve(__dirname, '../../src')
module.exports = function(config) {
    config.set({
        webpack: {
            devtool: 'inline-source-map', // 推荐使用inline-source-map
            module: {
                rules: [
                    // 像eslint-loader一样使用,并限定在源码上。
                    {
                        test: /\.js$/,
                        enforce: 'pre',
                        use: 'istanbul-instrumenter-loader',
                        inclues: [srcPath]
                    }
                    /* loaders */
                ]
            }
        },
        frameworks: ['mocha', 'sinon-chai'], // 测试框架随便一定要要和我一样
        files: [
            './index.js' // 推荐使用一个入口来导入所有的测试。
        ],
        preprocessors: {
            './index.js': ['webpack'] // 使用什么配置
        },
        // 增加代码覆盖率输出插件
        reporters: ['spec','coverage-istanbul'], 
        port: 9876, // 端口
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: false,
        browsers: ['PhantomJS'],
        singleRun: false,
        // 配置代码覆盖率插件
        coverageIstanbulReporter: {
            // 以什么格式, 这里设置了输出 html文件 ,info文件 ,及控制台
            reports: ['html', 'lcovonly', 'text-summary'],
            // 将文件输出路径定位
            dir: path.join(__dirname, 'coverage'),
            // 修正 weback 路径(翻译了是这个意思)
            fixWebpackSourcePaths: true,
            // 将生成的html放到./coverage/html/下
            'report-config': {
                html: {
                    subdir: 'html'
                }
            }
        }
    })
}

四、nodejs, browser测试使用同一套测试用例

  • package.json

{
    "scripts": {
        "node-test": "mocha --reporter spec --require\
         test/unit/common test/unit/specs/*.spec.js"
    }
}
  • test/unit/common.js

global.chai = require("chai")
global.should = require("chai").should()
global.expect = require("chai").expect
global.AssertionError = require("chai").AssertionError
const sinonChai = require("sinon-chai")

chai.use(sinonChai)

无需修改其它代码见 marked-zm

五、总结

  1. 下篇看看要不探讨 ci 集成,或者 vue 的面板组件直接加载组件并且切换不会丢失状态。

  2. 原来想写 npm 包发布后来发觉满地都是,就算了。

  3. 原文地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

karma使用webpack的代码覆盖率测试 的相关文章

随机推荐

  • 16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器

    最近在项目上遇到 用485协议命令控制灯光继电器的开关需要计算16进制 CRC16 MODBUS RTU通讯 校验码来写控制命令 这种在网上有现成的计算器 我们直接使用即可 以下为我用的一个计算器的链接 个人感觉还是蛮好用的 同时他还涵盖了
  • react Native java JDK与Gradle版本不兼容 构建失败

    react Native 版本介绍 本篇适用react Native已经搭建了java jdk 1 8的版本开发环境 如果需要写0 67版本及以上的项目 现在的gradle版本比较高 比如gradle6 0 构建版本和打包的时候会出现不兼容
  • ThinkPhp5使用bootstrap样式分页

    1 查看分页的配置 在application config php文件中最后 分页配置 paginate gt type gt bootstrap var page gt page list rows gt 15 2 下载 https v3
  • 04-Qt软件加入Log文件输出与终端彩色打印(包含行号)

    一 目的与需求 在开发qt应用程序中 经常使用打印调试软件 qt自己的qDebug 就满足了需求 但是当需要把一部分log记录到文件的时候qt就没有提供了 这个时候可以使用qDebug 的qInstallMsgHandler来指定打印回掉函
  • 软件测试第一阶段:web前端技术基础-16- linux系统安装软件,运用shell脚本等

    一丶yum安装 用yum安装软件分三步 第一步 准备一个软件源 软件源其实就是一个目录 在这个目录中有很多的rpm包 第二步 创建yum的配置文件 文件需要指向到软件源 第三步 用yum进行安装 卸载软件 第一步 配置软件源 1 首选将系统
  • Java基础知识-多态的实现机制

    面向对象设计具备三种特性 封装 继承 多态 多态是面对对象程序设计中代码重用的一个重要机制 它表示当同一个操作作用在不同的对象的时候 会出现不同的语义 从而会产生不同的结果 比如 同样是 操作 3 4用来实现整数的相加 而 3 4 却实现了
  • js取小数点后两位四种方法

    1 通过substring截取 function getnum var num 22 123456 var s num toString var result s substring 0 s indexOf 3 var result2 s
  • 安装Redis数据库

    Redis是一种内存缓存数据库 它可以帮助我们高效地缓存我们的数据 以下是Redis安装步骤 1 在Linux系统安装 安装Redis 在终端中输入以下命令 sudo apt get update sudo apt get upgrade
  • centos下禁用网卡IPv4或者IPv6

    Centos下禁用网卡的ipv4 直接删除网卡的ipv4地址 ip addr del 10 2 21 40 24 dev ens160 启用ip addr add 10 2 21 40 24 dev ens160 禁用ipv6功能 root
  • 讯飞星火,正式开放!

    今日起 讯飞星火认知大模型面向全民开放 在各大主流应用商店搜索 讯飞星火 App 或登录讯飞星火官网均可直接注册使用 专属申请通道 长按内测二维码 点击 申请注册 通过专属二维码 注册免费 秒通过 即刻上手免费体验 无需审核等待 还可以获得
  • 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7操作系统?

    说来说去还不是利益驱使 wintel联盟暗地里让客户淘汰旧的硬件旧的系统呗 区区几个驱动对英特尔来讲还不是手到擒来的事 近来市场上英特尔不是又推出了一种新的低端芯片组主板 基于22纳米打造的H310C 原生支持WIN7系统安装 这款芯片组根
  • 嵌入式(exec函数族和守护进程)

    exec 函数族 背景 fork创建进程之后 子进程和父进程执行相同的代码 但是在实际开发当中 我们希望父子进程执行不同的代码 作用 执行指定的程序 include
  • POJ 3259 Wormholes(最短路——Bellman-ford)

    A Wormholes While exploring his many farms Farmer John has discovered a number of amazing wormholes A wormhole is very p
  • Think in Java(一)

    把对象想象为 服务提供者 通常被隐藏的部分是对象内部脆弱的部分 组合和聚合 组合 使用现有的类合成新的 聚合 当组合是动态发生的时候 被称为聚合 组合经常被视为 has a 关系 例如汽车拥有引擎 在建立新类时 应该先考虑组合 因为它更加简
  • EXCEL 如何制作混合数据透视图柱形图添加折线图

    当我们制作了数据透视图 增长率什么的 需要在柱形图上增加折线图 如何做呢 工具 原料 EXCEL2007 方法 步骤 1 新建一个工作表 而后数据入局 制作一个带增长率的数据透视表 2 选中数据 而后在上方功能区找到插入菜单 在下拉选项了里
  • PM 和 PL 的区别

    工作之前只知道PM是项目经理 PL是 项目负责人 看过几本职场小说 据我理解 PM职能更多是在人事和外部资源调度方面 而PL更多在技术层面去领导下面的开发人员 小组有PL PM各一个 同事对待他们的方式给我的理解就是 PM要比PL大 工作汇
  • linux————zabbix搭建

    目录 一 zabbix的概述 二 构成 一 server 二 web页面 三 数据库 四 proxy 五 agent 三 zabbix监控对象 四 zabbix的常用术语 五 zabbix监控框架 一 zabbix client架构 二 z
  • 视频会议用户洞察白皮书

    导读 白皮书重点通过桌面研究和定量调研的方式 对疫情后视频会议行业发展现状 用户行为及需求偏好和用户付费意愿等内容展开研究 以期加深对视频会议行业及用户的了解 希望能为相关企业与资本市场提供参考意见与运营建议 关注公众号 互联互通社区 回复
  • 蓝桥杯国赛 C/C++ ABC组题解(第四届 ~ 第十二届)

    2020年第十一届蓝桥杯国赛 题号 类型 C A组 C B组 C C组 试题A 结果填空 合数个数 美丽的 2 美丽的 2 试题B 结果填空 含 2 天数 日期处理 扩散 BFS 合数个数 试题C 结果填空 本质上升序列 线性DP 阶乘约数
  • karma使用webpack的代码覆盖率测试

    前言 距离上一次博客有2个月了 倒不是没有可写东西就是提不起劲写 不说这些了这次写下我使用 karma webpack 中遇到的代码覆盖率问题 一 karma的使用 自个去搜吧 感觉讲这个的真的多 我就说一些建议 karma的测试框架改用m