前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 单文件测试

vue 单文件测试

作者头像
三毛
发布2023-06-09 14:40:07
5750
发布2023-06-09 14:40:07
举报
文章被收录于专栏:漫漫前端路

前言

官网虽有测试例子,但涉及较窄,遇到组件中存在异步传参、触发 action、获取 state 等问题时,编写单元测试便不知从哪下手。

这篇文章结合实际项目,旨在解决上述问题,顺便记录写测试文件时遇到的一些问题,希望对各位朋友有所帮助。

当然,最重要的问题是:为什么要写测试?

于我,大概就是:如果写测试不是为了装逼,那将毫无意义 对写的程序更自信吧。

环境

vue-cli@2.9.2 配置 Jest 测试;

使用插件 vue-test-utils ,提供丰富的 api ,Vue 团队维护 。

代码语言:javascript
复制

正常情况下,test 目录如果像下图一样,那么接下来就可以在 spaces 文件夹里编写测试用例了。

简单组件实例

template 部分

代码语言:javascript
复制

script 部分

代码语言:javascript
复制

编写测试用例

代码语言:javascript
复制

mock action and state

在这个组件里,会调用 Vuex action ,以及 state ,为了完成测试,需要给 Vue 传递一个伪造的 Store 。

代码语言:javascript
复制

getter, mutation 同理。

mock router

当组件中使用 route 或者 router 时,并不推荐安装 Vue Router,因为安装之后也只是在 Vue 的原型上添加 route 和 router 只读属性,这意味着伪造 route 或 router 都会失效。取而代之,只需 mock route 和 mock router。

代码语言:javascript
复制

测试计算属性 logining

代码语言:javascript
复制

submit 方法测试

在这个简单组件中,需要测试 input 键盘按下,以及 button 点击是否触发 submit 方法。

代码语言:javascript
复制

mock funcion

最简单的 mock function 的写法,在上文中已经写出:jest.fn() 。

如果要指定返回内容,可以写成以下方式:

代码语言:javascript
复制

在实际应用里,请求结果的不确定性,以致并不能用以上方法来 mock 请求。

查阅相关资料后,发现如下方法,可以满足一个方法,输出不同结果的需求。

代码语言:javascript
复制

用于例子组件中,只需改动测试的 action 即可:

代码语言:javascript
复制

编写测试:

代码语言:javascript
复制

测试快照

jest 有一个提供快照的功能,它能够将某个状态下的 html 结构以一个快照文件的形式存储下来,以后每次运行快照测试的时候如果发现跟之前的快照测试的结果不一致,测试就无法通过。

如果页面确定需要改变,只需要运行测试的时候加上 -u 参数,更新快照即可。

代码语言:javascript
复制

第一次运行快照时,会创建一个 __snapshots__ 目录存放快照文件。

其他

诸如 props ,emit 的测试, vue-test-utils 上已经有详细的例子了,也就不再重复。

这里有测试的例子: https://github.com/j...

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境
  • 简单组件实例
  • 编写测试用例
    • mock action and state
      • mock router
        • 测试计算属性 logining
          • submit 方法测试
            • mock funcion
              • 测试快照
                • 其他
                • 参考
                相关产品与服务
                腾讯云服务器利旧
                云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档