编写一个测试用例来运行,我们先测试下app.vue文件加载后title值是否符合预期。新建test文件夹,test文件夹下建立unit文件夹,unit文件夹下建立app.spec.js文件。目录结构如下:
目录
app.spec.js内容如下
test/unit/app.spec.js
在当前目录打开命令行,输入karma start,这时karma会启动一个服务来监听测试。
karma start
不要关闭当前命令窗口,再打开一个命令窗口,输入karma run,这时我们会看到测试通过的提示。
karma run
查看测试覆盖率
单元测试属于白盒测试,测试覆盖率也是测试指标之一。karma提供了karma-coverage来查看测试覆盖率。
安装karma-coverage:npm install karma-coverage --save-dev
配置覆盖率,在预处理的文件上加coverage
karma.conf.js
在报告中使用coverage
karma.conf.js
配置覆盖率报告的查看方式
karma.conf.js
再次执行karma start和karma run,我们能看到生成了覆盖率查看文件夹
目录
在浏览器中打开上图中的index.html我们能看到覆盖率已经生成。
index.html
点击「unit/」我们看到app.spec.js代码有3036行,测试覆盖率是打包之后文件的覆盖率,
unit/index.html
点开文件,果然是打包之后的代码。这个覆盖率显然不是我们想要测试的源文件的覆盖率。
unit/app.spec.js
怎么办呢?想想开发时浏览器打开的也是编译后的文件,我们怎么定位源码呢?
Bingo! sourcemap。
当然这里只用sourcemap是不够的,测试覆盖率神器isparta闪亮登场。
安装:npm install --save-dev isparta isparta-loader
修改vue的js loader
karma.conf.js
再次执行karma start和karma run,我们能看到测试覆盖率文件已经能找到源文件了,并且覆盖率只有js代码,并不包括无关的template和style,简直太好用了有没有。
index.html
src/index.html
src/app.vue.html
等等,怎么还有那个3000多行的文件,这个覆盖率没有用,能去掉吗?答案是肯定的。我们只需要把karma.conf.js中preprocessors的coverage去掉即可。
karma.conf.js
再次执行karma start和karma run,我们能看到覆盖率的文件变成这样了。
index.html
最后我们可以把karma的watch模式打开,之后只需要运行karma start就能监控文件变动并自动执行测试了。
karma.conf.js
至此karma+webpack搭建的vue单元测试环境就已经ready了。
文章图片较多,略显拖沓,不妥之处欢迎吐槽,欢迎拍砖。
关于如何写测试脚本,请看这篇文章Vue单元测试case写法。
更新webpack2