Vue 单元测试 使用mocha+jest
Vue 单元测试
官网:https://vue-test-utils.vuejs.org/zh
定义:
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
指令:
package.json文件
- "test:unit": "vue-cli-service test:unit"
测试驱动开发(TDD:Test-Driven Development)
mocha+jest
测试框架 mocha
Mocha官网:https://mochajs.org/使用expect断言语句
chia官网:https://www.chaijs.com/
chia部分方法文档:https://www.chaijs.com/api/assert/
是JavaScript的一种单元测试框架。
mocha的特点主要有:既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
可以自动运行所有测试,也可以只运行特定的测试;
可以支持before、after、beforeEach和afterEach来编写初始化代码。
参考
断言库 jest
jest
实例 mocha expect方法断言
格式模板
describe 套件
describe('名称',()=>{
<!-- 用例 -->
it('方法描述',()=>{
/* 使用expect 断言语句 */
/* 方法举例 */
expcect(/* 需要检测的方法 */).to.be.equal(/* 检测结果 */)
})
})
描述
it()
测试异步代码 通过将回调(通常称为done)添加到it()
.to.be.equal 是否相等
.to.be.deep.equal 是否严格相等
示例代码
tests\unit\parser.spec.ts
测试各类断言语句执行成功或者失败
/* 编写测试用例 */
import {parser,stringify} from '@/code/parser';
/* 使用mocha(测试工具) +chai(断言库) */
import { expect } from 'chai';
/* 套件 */
describe('mytest1', () => {
/* 用例 */
// 常见的关系 相等 大于/小于 包含和不包含
it('测试parser方法是否可用',()=>{
// deep.equal 表示两个对象是否完全相等(引用空间无所谓)
// .to.be.equal 表示两个对象相等(引用空间无所谓)
expect(parser('name=zfpx')).to.be.deep.equal({name:'zfpx'})
})
it('测试stringify方法是否可用',()=>{
expect(stringify({name:'3px'})).to.be.equal('name=3px')
})
})
/* 断言语句各类 */
describe('测试方法',()=>{
it('相等关系',()=>{
expect(1+1).to.be.equal(2);//相加的值
expect([1,2,3]).to.be.lengthOf(3);//长度
expect(true).to.be.true;//布尔值
})
it('包含',()=>{
expect('zfpx').to.be.contain('zf');//是否包含指定字符
expect('zfpx').to.be.match(/zf/);//是否匹配正则 })
it('大于,小于',()=>{
expect(5).to.be.greaterThan(3)
expect(3).to.be.lessThan(6)
expect(3).to.be.not.greaterThan(5)//不大于3
})
})测试模块是否正确渲染值
src\components\unittest\demo1.vue
<!-- 单元测试:是否能成功显示渲染的组件元素 -->
<template>
<div class="demo1">
<h1>{{ datas }}</h1>
</div>
</template> <script>
export default {
name:'demo1',
props:['datas'],
data () {
return { };
}
} </script>
<style lang='less' scoped>
</style>tests\unit\unit1.spec.ts
import unitdemo1 from '@/components/unittest/demo1.vue';
import Vue from 'vue';
import {expect} from 'chai';
import {mount} from '@vue/test-utils';
/* 写法1 产地属性后能否正常显示结果*/
describe('unitdemo1',()=>{
it('1.传递属性后能否正常显示结果',()=>{
// 原生自己测试vue
// extend 方法可以根据实例创建一个类
let Constructor = Vue.extend(unitdemo1);
// 对组件进行挂载
// vm.$el mocha 测试的时候集成了 jsdom
let vm:any = new Constructor({
propsData:{datas:'hello'}
}).$mount(); /* 检测h1标签内是否包含hello */ expect(vm.$el.querySelector('h1').innerHTML).to.be.contain('hello');
})
})
/* 写法2 使用mount */
describe('unitdemo1',()=>{
it('2.传递属性后能否正常显示结果',()=>{
let wrapper = mount(unitdemo1);
/* 设置 Wrapper vm 的 prop 并强制更新。
https://vue-test-utils.vuejs.org/zh/api/wrapper/setProps.html
*/
wrapper.setProps({datas:'hello'});//设定传递的值为hello
expect(wrapper.find('h1').text()).to.be.contain('hello');
})
})
测试模块内的加法是否执行
src\components\unittest\demo2.vue
<!-- -->
<template>
<div>
<span id="count">{{count}}</span>
<button @click = "increment">+</button>
</div>
</template>
<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》'; export default {
//import引入的组件需要注入到对象中才能使用
components: {},
data() {
//这里存放数据
return {
count:10
};
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//方法集合
methods: {
increment(){
this.count++
}
},
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeCreate() {}, //生命周期 - 创建之前
beforeMount() {}, //生命周期 - 挂载之前
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style lang='lesss' scoped>
/* //@import url(); 引入公共css类 */
</style>
tests\unit\unit2.spec.ts
import unitdemo2 from '@/components/unittest/demo2.vue';
import Vue from 'vue';
import {expect} from 'chai';
import {mount} from '@vue/test-utils'; /* 写法2 使用mount */
describe('测试demo2组件',()=>{
it('单机能否+1',()=>{
let wrapper = mount(unitdemo2);
expect(wrapper.find('#count').text()).to.be.equal('10');
wrapper.find('button').trigger('click');
expect(wrapper.find('#count').text()).to.be.equal('11');
})
})
测试代码执行:npm run test:unit
测试结果
DONE Compiled successfully in 3577ms
[=========================] 100% (completed)
WEBPACK Compiled successfully in 3577ms
MOCHA Testing...
{ name: 'zfpx' }
name=zfpx
mytest1
√ 测试parser方法是否可用
√ 测试stringify方法是否可用
测试方法
√ 相等关系
√ 包含
√ 大于,小于
unitdemo1
√ 1.传递属性后能否正常显示结果
unitdemo1
√ 2.传递属性后能否正常显示结果
测试demo2组件
√ 单机能否+1
8 passing (111ms)
MOCHA Tests completed successfully
Vue 单元测试 使用mocha+jest的更多相关文章
- Vue单元测试Karma+Mocha
Vue单元测试Karma+Mocha Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner).该工具在Vue中的主要作用是将项目运行在各种主流Web浏览 ...
- 使用Karma、Mocha实现vue单元测试
Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner).该工具在Vue中的主要作用是将项目运行在各种主流Web浏览器进行测试.换句话说,它是 ...
- 前端单元测试框架-Mocha
引言 随着前端工程化这一概念的产生,项目开发中前端的代码量可谓是'急剧上升',所以在这种情况下,我们如何才能保证代码的质量呢,对于框架,比如React.Vue,因为有自己的语法规则,及时每个开发人员的 ...
- 使用 Jest 进行 Vue 单元测试
本文介绍:1.vue-cli3下jest环境的搭建2.vue组件基本的测试方法 环境配置 vue-cli3 的插件使安装流程变得格外简单,通过 vue ui 启动可视化管理系统,在插件栏,点击 ‘添加 ...
- 学习笔记——在vue中如何配置Jest(一)
最近在搞Jest单元测试,如何在vue中安装和使用jest我就不说了,前一篇文章简单的说了一下在使用jest时遇到的一些问题,但是我觉得并没有真正的解决的很好.后面会在学习过程中更新前面的那篇文章,加 ...
- vue 单元测试
单元测试 配置和工具 任何兼容基于模块的构建系统都可以正常使用,但如果你需要一个具体的建议,可以使用Karma进行自动化测试.它有很多社区版的插件,包括对webpack和browserify的支持. ...
- Vue单元测试vue2-jest-coverage的package.json 配置
依赖的版本很重要,不要出错了 devDependencies:{ "babel-core": "^6.26.3", "babel-jest" ...
- 前端js单元测试 使用mocha、chai、sinon,karma
karma(因果报应) 提供在浏览器上测试 可以同时跑在多个浏览器下 mocha测试框架 其他测试框架还有Jasmine chai断言库 expect = chai.expect sinon ...
- #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)
学习对vue组件进行单元测试,先参照官网编写组件和测试脚本. 1.简单的组件 组件无依赖,无props 对于无需导入任何依赖,也没有props的,直接编写测试案例即可. /src/testSrc/si ...
随机推荐
- 生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理
生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理 zabbix服务器经常报警io过载,在报警的时候发现是数据库在删除历史数据时耗时较长 数据库积攒了大量的历史数据信息,主要集中在 ...
- MongoDB数据表添加字段
db.tshare_a.insert( { "_id" : ObjectId("57172b0f657f8bbb34d70147"), "picUrl ...
- [转]Winform打包工具SetupFactory 9 的使用
写了个WinForm的小程序..以前没打过包..只是直接把Bin里的东西复制出来使用..自己使用是足够.但是发给别人毕竟不太好看(不牛逼)..所以就想着打包.. Vs2012自带的有打包的功能..相信 ...
- linux记录-安装zabbix监控系统
1. 安装依赖yum -y install libcurl-devel libxml2-devel net-snmp net-snmp-devel2. 安装 nginxyum -y install n ...
- 转:HR schema
###createe RemRem $Header: hr_cre.sql 29-aug-2002.11:44:03 hyeh Exp $RemRem hr_cre.sqlRemRem Copyrig ...
- 关于Image模块的调色板
参考:https://blog.csdn.net/zhangziju/article/details/79123275 https://blog.csdn.net/qq_21239003/articl ...
- 石子合并 区间DP模板题
题目链接:https://vjudge.net/problem/51Nod-1021 题意 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石 ...
- Python 绘图库Matplotlib入门教程
0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...
- [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染
Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...
- lnmp 是不是该吐吐槽
lnmp 提供提供了便捷 , 并且手也伸的挺长的,它已不仅仅是个服务器环境那么简单 作为服务器继承环境来讲,可能每个人的认知程度不一,总之用了它需要服从它的规则 但从个人感觉上,其埋的坑还是让人不适, ...