Vue 全家桶单元测试简要指南
此文已由作者张汉锐授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
vue 的单元测试环境
按照目前全家桶的情况,是需要 webpack 的支持的。可以直接使用 vue-cli ,选择 webpack 模版,里面会有完整的单元测试 & 端对端测试的配置。如果想要自己配置,则在配置完基本的 karma 测试环境之后,将 webpack 加入到 preprocessor 上。
测试覆盖率
同理 vue-cli 的 webpack 模版已经做的很完善了。如果不想用全家桶,在不需要 babel 编译的情况下,单元测试覆盖率的计算,可以通过 istanbul 实现,具体可以看 istanbul 文档。但如果需要经过 babel 编辑的话,就需要借助 babel-plugin-istanbul。
vue 组件(文件)的单元测试
主要考虑几个点:
组件的方法测试
组件 props 的测试
组件 UI 的更新测试(异步的)
组件通信的测试
具体参考官网 Unit Testing ,里面提供了很清晰的例子,这里就不做搬运工了。
vuex 的单元测试
vuex 的测试相对简单,vuex 主要的测试对象就是 mutation, action, getter 这些。其中 :
mutation:接受一个 state 为参数,并改变state 的属性。 所以测试时候时候,mock 一个 state,接着调用 mutataions,断言一下 state 的变化是否是预期的。
action: 这个比较绕,他可以 commit 多个 mutataion,也可以异步, 所以测试目标就变成了 action 每一个 commit 是否正确。思路上,mock 一个 commit 函数,在 commit 函数中记录每次 mutaion 的 type 和数据,然后和期望的对比。
getter:略
PS: 如果 mock ajax 或者 setTimeout, setInterval 这些,可以使用 mock 库 sinon ,关键词 spy,stub,fakeServer 。
关于 vuex 单元测试的详细列子说明,可以参考 官网的文档 Unit Testing
vue + vuex 的单元测试
也就是:vue 组件中依赖了 vuex 的 mutation, actions, getters 的时候 ,vue 如何做测试比较好。
vue-loader 文档 给出了方法。
首先,社区有个 inject-loader 能够 mock 依赖,看看下面例子
// log.jsvar myUtils = require('./utils'); myUtils.log('hi');// test.jsvar inject = require('!!vue-loader?inject!./log.js')var myLog = inject({ './utils':{
log(){ //....
}
}
})
inject-loader 能够在加载 log.js 时候,允许我们 mock log.js 的依赖。所以当组件依赖 vuex 的时候,就可以通过 inject-loader 来 mock 依赖,从而方便将 vuex 和 vue 组件的测试分开。
具体的原理和使用方法,可以看上面给出的文档。
(注意,文档说的 inject-loader@3.x is currently unstable ,文档演示的例子也是提示安装 2.0 ,实际上现在 3.0 已经稳定了,参考这里。使用 2.0 反而问题多多)
其他
参考资料:
tips:记得安装 sinon,chai 的 types 文件,写起测试来会很爽
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 如何准确又通俗易懂地解释大数据及其应用价值?
【推荐】 AndroidTV开发(3)
Vue 全家桶单元测试简要指南的更多相关文章
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- 从零开始系列之vue全家桶(3)安装使用vuex
什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...
- 使用vue全家桶制作博客网站
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...
- 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程
使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...
- Vue全家桶介绍
一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...
- 一个简单的假vue全家桶(vue+vue-router+require)
首先说明我觉得这是一个比较好理解的vue全家桶(虽然是假的),模块化也是用require来做的,而且如果后期有必要压缩我也会用gulp来做 1.依赖个个本地模块,require只是用来载入page,这 ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- Vue全家桶了解一下(待补充)
vue全家桶了解一下 一.vue+vue-router+vuex+axios1.vue:使用vue-cli,生成最基本的vue项目2.vue-router:vue项目中的路由管理插件3.vuex:vu ...
随机推荐
- angularjs $http提交数据探索
前两天在搞自己的项目,前端js框架用的是angularjs框架:网站整的差不多的时候出事了:那就是当我用$http.post()方法向服务器提交一些数据的时候:后台总是接收不到数据: 于是采用了其他方 ...
- jQuery应用之eraser.js使用,实现擦除、刮刮卡效果
jquery.eraser是一款使用鼠标或触摸的动作来擦除画布显示真正图片的插件.jquery.eraser插件的原理是用一个画布遮住图片,然后根据触摸或鼠标输入来擦除画布显示图片,您可以在参数中指定 ...
- Delphi - 数组和结构体
技术交流,DH讲解. 记得很早之前我就说过,数组和结构体在内存中其实一样的,他们都是连续分布的.例如: ? 1 2 3 4 TMyStruct = record A,B,C:Integer; en ...
- vim乱码的解决
解决vim文件乱码,打开文件乱码,菜单,提示信息乱码: 有四个跟字符编码方式有关的选项,encoding.fileencoding.fileencodings.termencoding 在linux中 ...
- 分享知识-快乐自己:Liunx 根目录结构
- 高并发下用pdo,文件排它锁,redis三种方法对比
<?php header('content-type:text/html;charset=utf-8'); // //无控制 // $DB_DSN = ' ...
- codeforces 653B B. Bear and Compressing(dfs)
题目链接: B. Bear and Compressing time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- FFMPEG-AVFilter研究
FFMPEG中的libswscale是做像素转换的,但是对于一些复杂的操作,比如添加水印等,这个库就不行了,这时候就要说一下另外一个AVFilter.AVFilter完全可以替代libswscale的 ...
- linux vsftpd 服务配置
vsftpd.conf配置如下: # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings ...
- Access中创建子数据表/主子数据表
摘 要:我们为什么要使用Access,而不用Excel,因为数据库可以大幅度地消除冗余数据,其方法就是将数据拆分到不同的表中,再通过“关系”建立表间的联系.那么如何确定表间的关系呢.表之间的关系是通过 ...