#单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)
学习对vue组件进行单元测试,先参照官网编写组件和测试脚本。
1、简单的组件
组件无依赖,无props
对于无需导入任何依赖,也没有props的,直接编写测试案例即可。
/src/testSrc/simpleComp.vue
<template>
<span>{{ message }}</span>
</template> <script>
export default {
data () {
return {
message: 'hello!'
}
},
created () {
this.message = 'bye!'
}
}
</script>
/test/unit/specs/simpleComp.secs.js
import Vue from 'vue'
import simpleComp from '@/testSrc/simpleComp.vue' describe('simpleComp', () => {
// 检查原始组件选项
it('has a created hook', () => {
expect(typeof simpleComp.created).to.eql('function')
}) // 评估原始组件选项中的函数结果
it('sets the correct default data', () => {
expect(typeof simpleComp.data).to.eql('function')
const defaultData = simpleComp.data()
expect(defaultData.message).to.eql('hello!')
}) // 检查 mount 中的组建实例
it('correctly sets the message when created', () => {
const vm = new Vue(simpleComp).$mount()
expect(vm.message).to.eql('bye!')
}) // 创建一个实例并检查渲染输出
it('renders the correct message', () => {
const Constructor = Vue.extend(simpleComp)
const vm = new Constructor().$mount()
expect(vm.$el.textContent).to.eql('bye!')
})
})
describe('', () => {// describe块
it('', () => { //一个it块代表一个测试用例
})
// 多个it块构成了test suite【测试套件】
})
我在测试的时候是一个it块一个it块的增加,每编写完成一个it块,就保存并查看【#karma start】监控的运行结果。大概就是webpack compile 成功与否,测试用例在各浏览器的运行情况,代码覆盖率总结报告。

这里应该是 8 SUCCESS, 忘记截图了。Statements表示“声明”,Branches表示分支,Functions表示方法,Lines表示行的覆盖率。
2、有入参的组件
组件有props
对于组件需要props,编写单元测试时,通过propsData传递该参数。
/src/testSrc/propComp.vue
<template>
<p>{{ msg }}</p>
</template> <script>
export default {
props: ['msg']
}
</script>
/test/unit/specs/propComp.specs.js
/**
* 组件需要 props 时,通过 propsData 传递该参数
*/
import Vue from 'vue'
import propComp from '@/testSrc/propComp.vue' function getRenderedText (Component, propsDataMsg) {
const Ctor = Vue.extend(Component)
const vm = new Ctor({ propsData: propsDataMsg }).$mount()
return vm.$el.textContent
} describe('propComp', () => {
it('renders correctly with different props', () => {
expect(getRenderedText(propComp, {
msg: 'Hello'
})).to.eql('Hello') expect(getRenderedText(propComp, {
msg: 'Bye'
})).to.eql('Bye')
})
})
3、有依赖其他组件的组件【TODO-->未解决,会报错还没理解】
若组件存在依赖,则可通过inject-loader解决。inject-loader可将任意依赖项注入到*.vue组件中。
/src/testSrc/dependencyComp.vue
<template>
<div class="msg">
{{ msg }}
</div>
</template> <script>
// this dependency needs to be mocked
import SomeService from '../service' export default {
data () {
return {
msg: SomeService.msg
}
}
}
</script>
/test/unit/specs/dependencyComp.specs.js
import Vue from 'vue' // "!!"表示禁用全局配置的所有loaders。“vue-loader?inject!”表示使用vue-loader,传入inject参数
const ExampleInjector = require('!!vue-loader?inject!./example.vue')
// 运行ExampleInjector函数返回一个denpendencyComp的实例,该实例中denpendencyComp组件的依赖项已被模拟
const ExampleWithMocks = ExampleInjector({
// mock it
'../service': {
msg: 'Hello from a mocked service!'
}
}) describe('dependencyComp', () => {
it('should render', () => {
const vm = new Vue({
template: '<div><test></test></div>',
components: {
'test': ExampleWithMocks
}
}).$mount() expect(vm.$el.querySelector('.msg').textContent).to.eql('Hello from a mocked service!')
})
})
4、有异步操作的组件
对于异步操作,it块执行的时候,需要传入一个回调函数,通常该函数被命名为done。当测试结束的时候,必须显式调用这个函数【done()】,告诉Mocha测试结束了。否则,Mocha就无法知道,测试是否结束,会一直等到超时报错。
就用之前编写的简单的组件,增加测试用例 —— it块就行了。
/src/testSrc/simpleComp.vue
【见1、简单的组件】
更新 /test/unit/specs/simpleComp.specs.js
// 新增一个it块
// 异步操作:在状态更新后检查生成的 HTML
it('updates the rendered message when vm.message updates', done => {
const vm = new Vue(simpleComp).$mount()
vm.message = 'foo'
// 在状态改变后和断言 DOM 更新前等待一刻
Vue.nextTick(() => {
expect(vm.$el.textContent).to.eql('foo')
done() //显示调用结束函数done(),告诉mocha异步操作结束
})
})
#karma start

实际上总共只有7个测试用例(即7个it块),但是我配置浏览器的时候配置了两个(Chrome、FireFox),每个而是用例都会在它们两个浏览器运行,故而总共运行了14个。
资料:
1、Vue单元测试---Karma+Mocha+Chai实践
#单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)的更多相关文章
- #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(一)
目标: 为已有的vue项目搭建 karma+mocha+chai 测试框架 编写组件测试脚本 测试运行通过 抽出共通 一.初始化项目 新建项目文件夹并克隆要测试的已有项目 webAdmin-web 转 ...
- 大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
一. 前端自动化测试 大多数前端开发者对测试相关的知识是比较缺乏的,一来是开发节奏很快,来不及写,另一方面团队里也配备了"人肉测试机",完全没必要自己来.但随着项目体量的增大,许多 ...
- 搭建 vue2 单元测试环境(karma+mocha+webpack3)
从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...
- 使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
使用 TypeScript & mocha & chai 写测试代码实战(17 个视频) 使用 TypeScript & mocha & chai 写测试代码实战 #1 ...
- 自动化单元测试(Karma + Mocha)
使用 Karma + Mocha做单元测试 Karma([ˈkɑrmə] 卡玛)是一个测试运行器,它可以呼起浏览器,加载测试脚本,然后运行测试用例 Mocha([ˈmoʊkə] 摩卡)是一个单元测试框 ...
- 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...
- 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)
摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(二)
摘要:上篇文章说到了如何新建工程,并启动一个最简单的Electron应用.“跑起来”了Electron,那就接着把Vue“跑起来”吧.有一点需要说明的是,webpack是贯穿这个系列始终的,我也是本着 ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
随机推荐
- HDU - 5050 (大数二进制gcd)
It's time to fight the local despots and redistribute the land. There is a rectangular piece of land ...
- UVA - 11825 状压DP
该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 ...
- UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)
继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...
- [转] iOS开发者的Weex伪最佳实践指北
[From] http://www.cocoachina.com/ios/20170601/19404.html 引子 这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享 ...
- pip安装时的异常,找不到lib2to3\\Grammar.txt
[From] http://jahu.iteye.com/blog/2353325 异常 : [Errno 2] No such file or directory: 'd:\\python\\pyt ...
- 【VBA研究】Excel VBA利用ADODB访问数据库使用小结
[转自] http://blog.csdn.net/iamlaosong/article/details/18043433 作者:iamlaosong ▲连接Oracle数据库 Set cnn = C ...
- TensorFlow-简单的卷积神经网络
先弄懂卷积神经网络的原理,推荐这两篇博客:http://blog.csdn.net/yunpiao123456/article/details/52437794 http://blog.csdn. ...
- 如何写一个简单的webserver(一):最简实现
本文主要讲述如何用C/C++在Linux环境下写一个简单的支持并发的web服务器,并不考虑服务器的健壮性.安全性.性能等一系列因素. 在本文中,该服务器仅支持GET请求. 项目地址:https://g ...
- (转)淘宝系统信息采集和监控工具tsar
淘宝系统信息采集和监控工具tsar 项目地址:https://github.com/alibaba/tsar 一.介绍 Tsar是淘宝的系统信息采集和监测工具,主要用来收集服务器的系统信息(如cpu, ...
- 《X86汇编语言:从实模式到保护模式》读书笔记之引言
有幸结识了<X86汇编语言:从实模式到保护模式>一书.我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅.读罢一遍,意犹未尽.于是打算再读一遍,并把自己的读书所学总结成笔记,一来给 ...