1. 首页

使用Jest测试Vuex Action

在隔离状态下测试Action是非常直接的。action应该与调用它的组件解耦,独立的进行测试。

本文主要讲述在组件中正确的测试action


我正在书写一本关于VUE应用程序测试的开源书籍。它包括Vue组件、Vuex和Vue Router。这是一些来源和贡献指南(欢迎所有人提出idea)

本文中涉及到的测试代码 点击查看


创建 Action

我们先按照普通Vuex模式写一个action。

  1. 对API进行异步调用

  2. 对数据做一些处理(可选)

  3. 把结果作为moutation的参数进行提交

有一个身份验证action,它将用户名和密码发送到外部API,检查它们是否匹配。然后提交SET_AUTHENTICATED moutation 来更新状态。

使用Jest测试Vuex Action

action 测试 assert:

  1. api调用正确吗?

  2. payload正确吗?

  3. 提交mutation正确吗?

让我们继续写测试,让失败的消息指导我们。

测试

由于axios是异步的,为了确保Jest等待测试完成,我们需要将其声明为异步的,然后等待对action.authenticate的调用。否则,测试将在预期断言之前完成,我们将会看到一个常青树一样的测试——一个永远不会失败的测试。

运行上面的测试给了我们以下的失败信息:

使用Jest测试Vuex Action

这个错误来自Axios内部。我们正在向/api…发出请求,并且由于我们在测试环境中运行,所以甚至没有服务器向其发出请求,因此出现错误。我们也没有定义url或bod,我们应该这样做

由于我们正在使用Jest,所以可以很容易地使用jest.mock模拟API调用。我们将使用模拟的axios,而不是真实的axios,这将使我们对它的行为有更多的处理。JEST提供了ES6 Class Mocks,这是一个非常适合模拟axios的工具。

axios 模拟如下

axios 模拟如下

我们将url和body保存到变量中,由于我们可以确定返回值是正确的。因此不需要等待返回值,我们可以立即给API调用的promise返回resolve(成功)

测试通过

测试api的异常情况

我们只测试了API调用成功的情况。测试所有可能的结果是很重要的。让我们为发生错误的情况写一个测试。这一次,我们先写测试,然后再执行。

测试用例可以写成这样:

使用Jest测试Vuex Action

我们需要找到一种方法来强制axios模拟抛出一个错误,我们选择使用MockError变量。更新axios模拟:

使用Jest测试Vuex Action

如果变量名称是用mock预置的话, JEST允许在ES6类模拟中访问外部变量。现在我们可以简单地写mockError=true,AXIOS将抛出一个错误。

运行这个测试给我们错误信息如下:

使用Jest测试Vuex Action

成功地捕获了一个错误……但不是我们预期的那个错误。更新身份验证以抛出测试所预期的错误:

使用Jest测试Vuex Action

测试通过。

改进

现在你知道如何孤立地测试action了。至少有一个可能成功的优化, 作为一个 manual mock调用axion 模拟.(https:/ / jestjs。IO /文档/ EN /手动嘲笑)。在node_modules同级创建一个MOCK目录,并在那里实现模拟模块。

通过使用手动模拟,您可以在所有测试中共享模拟实现。JEST将自动使用MOCK模拟实现。在Jest网站和互联网上有很多关于如何做到这一点的例子。使用手动模拟重构这个测试作为练习留给读者。

结论

本文指南:

  • 使用 Jest ES6 class 模拟

  • 测试action成功个和失败的情况

这里可以找到本页描述的测试的源代码

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文来源于网络,其版权属原作者所有,如有侵权,请与小编联系,谢谢!

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:使用Jest测试Vuex Action

链接:https://www.javascriptc.com/1960.html

原文链接:https://www.zcfy.cc/article/testing-vuex-actions-correctly-with-jest

« 使用Vuex解决Vue中的身份验证
合格JS开发者都需要了解的ES2018新特性»
Flutter 中文教程资源

相关推荐

QR code