在 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. 1.5 Community and Conferences(社区和讨论组)+ 私货

    1.5 Community and Conferences(社区和讨论组)+ 私货 下面是一些和科学计算,数据处理相关的Python社群和讨论组,如果有什么问题可以进行提问: pydata: A Go ...

  2. 在myeclipse的工作环境上配置默认编码为UTF-8

        将默认环境转为UTF-8,看图分析: 在windows->Preferences上 这样整个环境就变成UTF-8,只是这样还不够, 还须要,假设你须要所有文件都设为UTF-8,就: wa ...

  3. 20155314 2016-2017-2 《Java程序设计》第3周学习总结

    20155314 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封 ...

  4. Connection reset原因分析和解决方案

    在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家.例如我们线上的 ...

  5. 腾讯云centos7.2安装mysql5.7

    一.查看是否安装mysql rpm -qa | grep mysql 什么都没显示,说明没有安装 二.进入到opt目录下,使用wget下载官方yum源的rpm包 cd /opt wget https: ...

  6. hadoop在CentOS下的安装配置

    版本:CentOS-6.8-x86_64-minimal,hadoop2.6.4,jdk1.7.0 首先把jdk.hadoop压缩包下载发送到CentOS下并解压 下载发送不多赘述,解压命令tar - ...

  7. centos下添加启动项

    chkconfig --add 服务名称 chkconfig --level 345 服务名称 on

  8. R语言学习笔记(二十二):字符串处理中的函数对比(代码实现)

    字符串处理中基本函数的使用 R自带函数与stringr包函数对比 > states <- row.names(USArrests) > # 提取字符串子集 > substr(x ...

  9. React-Native StyleSheet属性支持

    /** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is lice ...

  10. 14-HTML-CSS案例

    1.超链接美化 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...