如何对使用 Axios(或其他异步更新)的 Vue 组件进行单元测试?

     2023-02-22     275

关键词:

【中文标题】如何对使用 Axios(或其他异步更新)的 Vue 组件进行单元测试?【英文标题】:How to unit test Vue component that uses Axios (or other async update)? 【发布时间】:2019-05-16 09:25:02 【问题描述】:

我有一个 Vue 组件/视图,它使用 Axios 执行 API 请求并使用响应更新组件数据。我正在使用 Moxios 在单元测试中模拟 Axios 请求。

我尝试使用Vue.nextTick 来推迟更新数据的断言,但此时组件尚未更新。如果我添加延迟,则断言可以正常工作:

setTimeout(() => 
    expect(wrapper.text()).toMatch('Updated text')
    done()
, 500)

但是,这是一种不好的做法,会减慢测试速度并且是一种竞争条件。

每次组件更新时都会调用某种断言检查吗?本质上,我正在寻找类似的东西:

Vue.eventually(() => 
    expect(wrapper.text()).toMatch('Updated text')
    done()
)

【问题讨论】:

你想测试什么? 我想测试一下异步操作是否正确更新了组件。 【参考方案1】:

通用(非 Vue 特定)解决方法:

const test = () => 
    try 
        expect(wrapper.text()).toMatch('Updated text')
        done()
     catch (e) 
        setTimeout(test, 1)
    

setTimeout(test, 1)

但是,expect 中的任何失败都将被忽略,如果失败,测试将超时且不显示任何消息。

【讨论】:

Vue.js 模板循环 - 异步 axios 调用

...并渲染一个HTML模板,这很好用。对于其中一列,我需要使用axios执行额外的AJAX调用,因此每行获取数据。但是在AJAX调用完成后,我无法更新模板。我尝试将循环变量作为引用传递并尝试从axios返回Promise。我想我理解异步调用 查看详情

如何使用 axios 在 Vue 应用程序中获取、更新和渲染数据?

】如何使用axios在Vue应用程序中获取、更新和渲染数据?【英文标题】:Howtofetch,updateandrenderdatainVueappusingaxios?【发布时间】:2021-05-1014:25:46【问题描述】:我正在尝试从axiosget请求中获取数据,然后尝试从另一个axiosget请求的响... 查看详情

为啥vue不使用ajax

vue也可以使用ajax。ajax只是一种技术实现方式,之前一般是指jquery封装的ajax方法。在vue中,可以使用axios代替,也可以自己封装一个类似的ajax方法。封装异步传输方法一般需使用XMLHttpRequest对象或fetch等方法实现。参考技术Aajax和... 查看详情

使用 Vue.js 进行异步/等待 axios 调用

】使用Vue.js进行异步/等待axios调用【英文标题】:Async/awaitaxioscallswithVue.js【发布时间】:2018-11-2502:33:09【问题描述】:我在设置其中一个时遇到了一点问题。我的Vue.js应用程序中的值。我相信我要么不正确理解异步axios调用,要... 查看详情

vue中使用axios(异步请求)和mock.js模拟虚假数据

一.使用axios1.安装npminstall--save axios2.引用importAxiosfrom‘axios‘Vue.prototype.Axios=Axios二.使用mock1.安装npminstall--savemockjs2.创建mock目录3.创建mock.js4.引用importmockDatafrom‘./mock/mock‘5.使用this.Axios.post 查看详情

如何根据 axios 响应更新 vue 数据?

】如何根据axios响应更新vue数据?【英文标题】:HowdoIupdatevuedatabasedonaxiosresponse?【发布时间】:2020-08-1917:28:54【问题描述】:如何将axios中的数据放到vuejs数据中:value:[parseInt(this.maintemp1),parseInt(this.maintemp2)],<--------Hereismyprob... 查看详情

如何在vue中使用nexttick()

...,就要用到Vue.nextTick()。让我们详细的看看nextTick()函数是如何工作的。更改Vue组件数据时,DOM会异步更新。Vue会从所有组件中收集对虚拟DOM的多次更新,然后尝试创建一个批处理来更新DOM。例如,让我们看下一个切换元素显示的... 查看详情

swiper和vue配合使用的问题——vue的异步更新dom(代码片段)

...因此Swiper的官方文档要求在window.onload或$(document).ready()(使用JQuery或Zepto时)调用。但显然,这只适用于静态页面。如果Swiper中的数据是动态渲染的,且可能会通过Ajax请求获得最新的值而不断变化,那我们在什么时机去调用呢?... 查看详情

使用 axios、TypeScript 模板和异步函数对 VueJS 进行单元测试

】使用axios、TypeScript模板和异步函数对VueJS进行单元测试【英文标题】:UnittestingVueJSwithaxios,TypeScripttemplate,andasyncfunctions【发布时间】:2019-04-1721:41:59【问题描述】:我正在尝试对在其mounted()挂钩中进行HTTP调用的组件进行单元测... 查看详情

vue2中使用axios,以及axios拦截器的配置(代码片段)

目录一、vue2项目中如何实现异步请求1、axios:是一个基于Promise的网络请求库。既可以在node.js(服务器端)使用,也可以在浏览器端使用2、vue中的使用方法​(2)引用方法:​ A、原生的方式(不... 查看详情

axios使用总结(代码片段)

...功能。自从vue2.0之后,就不再对vue-resource更新,而是推荐使用axios技术详述使用方法在安装完成VUE后安装Axiosnpminstall--saveaxiosvue-axios从VUE框架中引入Axios,以便使用 查看详情

异步 axios 不使用 NODEJS 运行承诺

】异步axios不使用NODEJS运行承诺【英文标题】:AsyncaxiosdontrunpromiseusingNODEJS【发布时间】:2018-06-0923:46:31【问题描述】:我正在开发一个多人游戏,在客户端使用vue并使用nojejs作为游戏服务器(我使用vue-sockets.io与客户端和服务器... 查看详情

使用 axios 和 vue.js 取消先前的请求

...白该怎么做。【问题讨论】:【参考方案1】:2020更新:如何取消axios请求生成一个cancelToken并存储它importaxiosfrom\' 查看详情

vuevue入门--双向绑定,vue的组件,axios异步通信,计算属性,插值,自定义事件(代码片段)

...绑定2.Vue的组件3.Axios异步通信3.1.什么是Axios3.2.为什么要使用Axios3.3.第一个Axios应用程序4.Vue的生命周期5.计算属性6.插槽7.自定义事件8.Vue入门小结1.Vue双向绑定Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化的时... 查看详情

vuevue入门--双向绑定,vue的组件,axios异步通信,计算属性,插值,自定义事件(代码片段)

...绑定2.Vue的组件3.Axios异步通信3.1.什么是Axios3.2.为什么要使用Axios3.3.第一个Axios应用程序4.Vue的生命周期5.计算属性6.插槽7.自定义事件8.Vue入门小结1.Vue双向绑定Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化的时... 查看详情

如何在 Vue 中使用 axios 检索 JSON Web 令牌?

】如何在Vue中使用axios检索JSONWeb令牌?【英文标题】:HowtoretreiveJSONwebtokenwithaxiosinVue?【发布时间】:2021-06-2715:43:55【问题描述】:所以我正在尝试为我的第一个Vue项目创建一个CRUD页面,但我不断收到错误,并且无法找到一个好... 查看详情

在异步函数中执行 setTimeout 内的代码?

...法中推送新项目,并使用异步函数我试图了解then和catch是如何工作的,而不是在不了解它们内部如何工作的情况下使用它们(使用axios或其他东西)必须在3秒后执 查看详情

如何通过 Axios 将文件和数据一起发布?

】如何通过Axios将文件和数据一起发布?【英文标题】:HowcanIpostfileanddatatogetherviaAxios?【发布时间】:2020-08-1414:39:19【问题描述】:我正在尝试发布数据(在Vue应用程序中)。表单中还有一个图像文件输入。所有教程和答案都只... 查看详情