在 GearCase 开源项目 中,我使用了 Vue Cli 的默认测试框架。因此和样式相关的东西,都无法进行测试。因为它并不类似于无头浏览器,而是存在于虚拟内存之中。

现状

在如下 button.spec.js 单元测试用例当中,关于 icon 默认的 order 的测试用例无法进行测试,因为它涉及到了样式。前面已经提到由于它处于虚拟内存之中。因此只要进行单元测试,就会出现以下报错。

// 样式相关的测试用例
it('icon 默认的 order 是 1', () => {
const wrapper = mount(Button, {
propsData: {
icon: 'setting'
}
}) const vm = wrapper.vm
const icon = vm.$el.querySelector('svg')
expect(getComputedStyle(icon).order).to.eq('1')
})

在查看了 Vue Test Utils 的文档之后。查询到有一个属性 attachToDocument: true, 可以设置,试着把元素放置到 DOM 之中。

// 样式相关的测试用例 添加 attachToDocument: true 属性之后
it('icon 默认的 order 是 1', () => {
const wrapper = mount(Button, {
attachToDocument: true,
propsData: {
icon: 'setting'
}
}) const vm = wrapper.vm
const icon = vm.$el.querySelector('svg')
expect(getComputedStyle(icon).order).to.eq('1')
})

但我添加了之后,仍然无法通过测试。根本原因仍旧是没有使用 Karma 打开浏览器进行测试。

解决过程

  • 配置 package.json
    在 package.json 中添加依赖配置,如下图。
  • 安装依赖
    使用如下命令安装之前 package.json 中添加的依赖。

    yarn add -D karma karma-chrome-launcher karma-mocha karma-sourcemap-loader karma-spec-reporter karma-webpack chai sinon sinon-chai
  • 创建 karma.config.js
    在 Vue Cli 3 的官方文档 webpack 相关章节中,可以查询到 Vue Cli 3 将 webpack.config.js 藏到了一个地方,即 /node_modules/@vue/cli-service/webpack.config.js

    所以将该路径地址拷贝到 require 之后,让 karma 可以读取到 webpack 的配置。

    var webpackConfig = require('@vue/cli-service/webpack.config.js')
    
    module.exports = function (config) {
    config.set({
    frameworks: ['mocha'], files: [
    'tests/**/*.spec.js'
    ], preprocessors: {
    '**/*.spec.js': ['webpack', 'sourcemap']
    }, webpack: webpackConfig, reporters: ['spec'], browsers: ['ChromeHeadless']
    })
    }

新的问题

在做完上述 3 个操作流程之后,运行 npx karma start。又遇到了以下图片中的问题,测试无法进行。一直卡在这个地方。

新问题解决
后来仔细检查之后,发现 karma.config.js 文件名应该是 karma.conf.js,由于 vue.config.js 文件名的缘故,我错误的认为 karma 的配置文件名也是这种命名规则,所以上述的那个卡住无法进行测试的问题是由于配置文件名称错误导致的。

对比

Vue Cli 3 自带测试框架

无法运行和样式相关的测试用例。因为它并不类似于无头浏览器,而是存在于虚拟内存之中。

这些和样式挂钩的测试用例属性,会被认为是 undefined,因为对于 Vue Cli 3 自带测试框架而言,这些属性本身就是不存在的。因此无法进行测试。

karma 测试运行器

使用 karma 测试运行器之后,关于样式相关的测试用例可以正常进行运行。但也必须要添加前面提到的 attachToDocument: true, 属性将元素放置到 DOM 之中。

后记

由于组件的样式相关属性也有单元测试的必要,所以我决定将 karma 测试运行器作为我的默认单元测试框架,因此还需要在 package.json 中设置 "test:unit": "karma start", 以便 travis-ci 进行线上持续集成。

关于 GearCase UI

GearCase UI 组件框架已更新维护到 0.2.15 版本,如果喜欢该开源项目,请不要吝惜您的 star

项目地址:https://github.com/evenyao/GearCase
官方文档:https://gearcase-ui.cn

Vue Cli 中使用 Karma / Chrome 执行样式相关单元测试的更多相关文章

  1. vue cli 中关于vue.config.js中chainWebpack的配置

    Vue CLI  的官方文档上写:调整webpack配置最简单的方式就是在vue.config.js中的configureWebpack选项提供一个对象. Vue CLI 内部的 webpack 配置 ...

  2. vue cli中的env详解

    前言 相信使用过 vueCli 开发项目的小伙伴有点郁闷,正常开发时会有三个接口环境(开发,测试,正式),但是 vueCli 只提供了两种 development,production(不包含 tes ...

  3. vue.cli 中使用 less 来写css样式

    vue-cli 的webpack中已配置了less,但 package.json 中没有选项,为了方便开发中使用,需安装一下: 安装方式一: npm install less less-loader ...

  4. 在vue-cli生成的项目中使用karma+chrome进行单元测试

    用vue-cli生成项目时,如果选择了单元测试,那么会采用karma+mocha作为单元测试框架,默认使用的浏览器是PhantomJs. Karma 是一个基于Node.js的JavaScript测试 ...

  5. Vue-axios 在vue cli中封装

    common/post.js import axios from 'axios' // 引入axios import qs from 'qs' // 引入qs axios.defaults.baseU ...

  6. scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?

    css的预编译: 使用步骤: 第一步:用npm下三个loader(sass-loader.css-loader.node-sass): 第二步:在build目录找到webpack.base.confi ...

  7. Vue CLI 是如何实现的 -- 终端命令行工具篇

    Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供了终端命令行工具.零配置脚手架.插件体系.图形化管理界面等.本文暂且只分析项目初始化部分,也就是终端命令行工具的实现. 0. 用法 ...

  8. vue cli使用融云实现聊天

    公司有个项目要实现一个聊天功能,需求如下图,略显随意 公司最终选择融云这个吊炸天的即时通信,文档详细的一匹,刚开始看文档感觉很详细实现起来也不麻烦,有很多开源的demo可以在线演示和下载 不过我们的项 ...

  9. 关于Vue.cli 脚手架环境中引入Bootstrap时,table表格样式缺失的解决办法

    Vue+bootstrap不能正常使用table的样式 环境:下载官网的本地bootstrap包,然后在vue 的index.html引入bootstrap的css和js环境 问题描述:1. vue里 ...

随机推荐

  1. python第十四课--排序及自定义函数之自定义函数(案例二)

    案例二: python中定义有/无返回值的函数,演示python没有函数重载这一说 需求:自定义函数:计算两个整数的和值两个原则:1).有没形参有,两个 2).有没返回值可有可无 def my_sum ...

  2. 【CF163E 】e-Government

    题目 两个\(log\)的树状数组套树剖? 我们对于给出的\(n\)个模式串建立\(AC\)自动机,之后对于每一个询问串直接丢上去匹配 如果这里是暴力的话,我们直接一路跳\(fail\)累加作为结束位 ...

  3. [SCOI2007]组队

    嘟嘟嘟 这题有人说部分分O(n3)暴力,然而我暴力都没写过,调了半天也没用……还是看题解吧 首先,咱把A * ( h – minH ) + B * ( s – minS ) <= C 变个型,得 ...

  4. AdminLTE前端模板

    AdminLTE是一个Bootstrap框架模板,其功能组件并不比我直接提到的Metronic差. 第一次接触过AdminLTE是在学习Jeesite这个开源项目的时候.离现在已经有半年了. Admi ...

  5. _tcschr和_tcsrchr使用

    好处:是可以不管是用unicode 编码还是其他 ,代码都不用改. C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如: 1._tcschr代替strchr或者wcschr ...

  6. 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)

    前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...

  7. start_kernel之前的汇编代码分析

    start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((ui ...

  8. day 83 Vue学习三之vue组件

    本节目录 一 什么是组件 二 v-model双向数据绑定 三 组件基础 四 父子组件传值 五 平行组件传值 六 xxx 七 xxx 八 xxx 一 什么是组件 首先给大家介绍一下组件(componen ...

  9. CF GYM 101196 G That’s One Hanoi-ed Teacher

    That’s One Hanoi-ed Teacher 链接 题意: 询问一个汉诺塔的状态是否是最优的状态,如果是,询问还有多少步到最终状态. 分析: 考虑汉诺塔是怎么操作的,首先是考虑F(i)是有i ...

  10. Openstack入门篇(十五)之如何创建生产使用的openstack镜像

    在linux-node1节点上: [root@linux-node1 ~]# yum install -y openstack-nova-compute [root@linux-node1 ~]# y ...