karma+webpack搭建vue单元测试环境的方法示例(2)

编写一个测试用例来运行,我们先测试下app.vue文件加载后title值是否符合预期。新建test文件夹,test文件夹下建立unit文件夹,unit文件夹下建立app.spec.js文件。目录结构如下:

karma+webpack搭建vue单元测试环境的方法示例

目录

app.spec.js内容如下

karma+webpack搭建vue单元测试环境的方法示例

test/unit/app.spec.js

在当前目录打开命令行,输入karma start,这时karma会启动一个服务来监听测试。

karma+webpack搭建vue单元测试环境的方法示例

karma start

不要关闭当前命令窗口,再打开一个命令窗口,输入karma run,这时我们会看到测试通过的提示。

karma+webpack搭建vue单元测试环境的方法示例

karma run

查看测试覆盖率

单元测试属于白盒测试,测试覆盖率也是测试指标之一。karma提供了karma-coverage来查看测试覆盖率。

安装karma-coverage:npm install karma-coverage --save-dev

配置覆盖率,在预处理的文件上加coverage

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

在报告中使用coverage

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

配置覆盖率报告的查看方式

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

再次执行karma start和karma run,我们能看到生成了覆盖率查看文件夹

karma+webpack搭建vue单元测试环境的方法示例

目录

在浏览器中打开上图中的index.html我们能看到覆盖率已经生成。

karma+webpack搭建vue单元测试环境的方法示例

index.html

点击「unit/」我们看到app.spec.js代码有3036行,测试覆盖率是打包之后文件的覆盖率,

karma+webpack搭建vue单元测试环境的方法示例

unit/index.html

点开文件,果然是打包之后的代码。这个覆盖率显然不是我们想要测试的源文件的覆盖率。

karma+webpack搭建vue单元测试环境的方法示例

unit/app.spec.js

怎么办呢?想想开发时浏览器打开的也是编译后的文件,我们怎么定位源码呢?

Bingo! sourcemap。

当然这里只用sourcemap是不够的,测试覆盖率神器isparta闪亮登场。

安装:npm install --save-dev isparta isparta-loader

修改vue的js loader

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

再次执行karma start和karma run,我们能看到测试覆盖率文件已经能找到源文件了,并且覆盖率只有js代码,并不包括无关的template和style,简直太好用了有没有。

karma+webpack搭建vue单元测试环境的方法示例

index.html

karma+webpack搭建vue单元测试环境的方法示例

src/index.html

karma+webpack搭建vue单元测试环境的方法示例

src/app.vue.html

等等,怎么还有那个3000多行的文件,这个覆盖率没有用,能去掉吗?答案是肯定的。我们只需要把karma.conf.js中preprocessors的coverage去掉即可。

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

再次执行karma start和karma run,我们能看到覆盖率的文件变成这样了。

karma+webpack搭建vue单元测试环境的方法示例

index.html

最后我们可以把karma的watch模式打开,之后只需要运行karma start就能监控文件变动并自动执行测试了。

karma+webpack搭建vue单元测试环境的方法示例

karma.conf.js

至此karma+webpack搭建的vue单元测试环境就已经ready了。

文章图片较多,略显拖沓,不妥之处欢迎吐槽,欢迎拍砖。

关于如何写测试脚本,请看这篇文章Vue单元测试case写法

更新webpack2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f7be575cb18af6ea5e6d053678f513ac.html