详细的关于 @vue/test-utils 用法,查看 https://vue-test-utils.vuejs.org/zh/
import { expect } from 'chai'
import { shallowMount } from '@vue/test-utils'
import Header from '../src/components/Header'describe('Header', () => {
const wrapper = shallowMount(Header)
const header = wrapper.find('header')
const h1 = wrapper.find('h1')
it('有 header 标签', () => {
expect(header.exists()).to.be.true
})
it('有 h1 标签', () => {
expect(h1.exists()).to.be.true
})
it('h1 的文案为“VUE 单页模版”', () => {
expect(h1.text()).to.equal('VUE 单页模版')
})
it('h1 标签在 header 标签中', () => {
expect(header.contains('h1')).to.be.true
})
})
这里我引用 vue-single-page 的 Header 组件测试用例
首先通过 shallowMount 获取 wrapper
使用 chai 断言库编写相关的测试用例
运行结果
i 「wdm」: Compiled successfully.
15 01 2020 18:28:13.799:INFO [karma-server]: Karma v4.4.1 server started at http://0.0.0.0:9876/
15 01 2020 18:28:13.813:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
15 01 2020 18:28:13.820:INFO [launcher]: Starting browser Chrome
15 01 2020 18:28:17.075:INFO [Chrome 79.0.3945 (Windows 10.0.0)]: Connected on socket PUKPz4iBuFzeVNSsAAAA with id 91716917
TOTAL: 4 SUCCESS
可以看到我们的单元测试已经通过了
测试覆盖率报告
测试完成后,我们需要查看测试覆盖率报告。这需要在 webpack.test.config.js 和 karma.conf.js 中做一些配置修改
webpack.test.config.js
const merge = require('webpack-merge')
const path = require('path')
const webpackCommonConfig = require('./webpack.common.config')const testConfig = {
devtool: 'inline-source-map',
mode: 'none',
module: {
rules: [
{
test: /.spec.js$/i,
enforce: 'pre',
use: [
{
loader: 'istanbul-instrumenter-loader',
options: {
esModules: true
}
}
] }
] }
}
module.exports = merge(webpackCommonConfig, testConfig)
添加一个优先执行的编译 .spec.js 文件的 rules,loader 使用 istanbul-instrumenter-loader 并开启 esModules 模式
karma.conf.js
module.exports = function(config) {
config.set({ // ...
coverageIstanbulReporter: {
reports: [ 'html', 'text' ],
fixWebpackSourcePaths: true
},
reporters: [ 'coverage-istanbul' ]
//...
})
}
设置 reporters 为 [ ‘coverage-istanbul’ ],即使用 coverage-istanbul reporters










