详解Vue单元测试Karma+Mocha学习笔记(4)
Click.spec.js
import { destroyVM, createTest, createVue } from '../util' import Click from '@/components/Click' describe('click.vue', () => { let vm afterEach(() => { destroyVM(vm) }) it('测试按钮点击事件', () => { vm = createTest(Click, { AddNum: 10, InitNum: 11 }, true) let buttonElm = vm.$el.querySelector('button') buttonElm.click() buttonElm.click() buttonElm.click() // setTimeout 的原因 // 在数据改变之后,界面的变化会有一定延时。不用timeout有时候会发现界面没有变化 setTimeout(done => { expect(vm.ResultNum).to.equal(41) expect(vm.$el.querySelector('.init-num').textContent).to.equal('初始值为11') expect(vm.$el.querySelector('.click-num').textContent).to.equal('点击了3次') expect(vm.$el.querySelector('.result-num').textContent).to.equal('最终结果为41') done() }, 100) }) it('测试创建Vue对象', () => { let result vm = createVue({ template: ` <click @click="handleClick"></click> `, props: { AddNum: 10, InitNum: 11 }, methods: { handleClick (obj) { result = obj } }, components: { Click } }, true) vm.$el.click() vm.$nextTick(done => { expect(result).to.be.exist expect(result.ClickNum).to.equal(1) expect(result.ResultNum).to.be.equal(21) done() }) })
输出结果
click.vue
√ 测试按钮点击事件
√ 测试创建Vue对象
其他
所有示例代码都放Github仓库中便于查看。如果想查看更多好的测试用例,建议配合 Util.js 看一下 Element 的单元测试脚本的写法,里面有很多测试脚本可以供我们学习。作为被广大Vue用户使用的UI组件库,测试脚本肯定也写很很不错的~甚至可以将这些脚本照抄一遍,相信这会对学习Vue组件的单元测试有很大帮助。
下面是本人看Element单元测试的笔记,供参考。
Util.js 方法包含了大多数Vue组件化的测试需求。
vm.$el vm.$nextTick 和 vm.$ref 都是在测试过程中比较常用的一些Vue语法糖。
需要注意: vm.$nextTick 方法是异步的,所以需要在里面使用done方法。
异步断言,方法参数需要是 _ 或者 done
大多数时候查询元素通过 querySelector 方法查询class获得
vm.$el.querySelector('.el-breadcrumb').innerText
大多数情况下查询是否存在某个Class通过 classList.contains 方法获得,查找的结果为 true 或 false
vm.$el .classList.contains('el-button--primary')
异步测试必须以 done() 方法结尾。setTimeout 和 vm.$nextTick 是常用的异步测试。
实现按钮点击:通过获取按钮元素 btn,执行 btn.click() 方法实现。