首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用moxios在同一测试中拦截两个axios请求

如何使用moxios在同一测试中拦截两个axios请求
EN

Stack Overflow用户
提问于 2019-07-11 18:27:09
回答 1查看 740关注 0票数 0

我正在尝试在我的应用程序中测试删除按钮。当应用程序初始化时,它会向服务器发出一个axios请求,以获取好处列表。当单击delete按钮时,会发出另一个请求。由于某些原因,我的测试就是不能拦截第二个axios请求。

我尝试将初始请求存根,但仍然遇到同样的问题。

初始请求是

代码语言:javascript
复制
  useEffect(() => {
    axios.get('/api/v1/benefits')
      .then(response => {
        setBenefits(response.data)
      })
  }, [])

单击按钮时调用的函数为

代码语言:javascript
复制
  const deleteBenefit = benefit => {
    const id = benefit.id
    axios.delete(`/api/v1/benefits/${id}`)
      .then(response => {
        setBenefits(benefits.filter(benefit => benefit.id !== id))
        warning('Benefit Deleted')
      })
      .catch(error => {
        warning('Benefit could not be deleted. Please try again')
      })
}

这个测试写成

代码语言:javascript
复制
it('deletes the selected benefit', async () => {
    const { getByTestId, debug } = render(<Benefits />)
    moxios.wait(() => {
      const request = moxios.requests.mostRecent()
      request.respondWith({
        status: 200,
        response: benefits
      })
    })
    const deleteButton = await waitForElement(() => getByTestId('deleteButton1'))
    fireEvent.click(deleteButton)
    moxios.wait(() => {
      const request = moxios.requests.mostRecent()
      request.respondWith({
        status: 204,
      }).then(() => {
        expect(document.querySelectorAll('tbody > tr').length).toBe(3)
        done()
      })
    })
})

我希望第二个moxios.wait能够拦截delete请求。代码本身是有效的,当单击按钮时,它会通过axios请求向服务器发送delete请求。

我还确认了测试本身确实调用了该函数,因为为了测试它,我创建了一个虚拟元素并更新了它,这将更新测试。

我想知道这是不是moxios.wait的工作方式,但我找不到任何东西表明我的工作方式将是一个问题。

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 19:56:00

我意识到我没有将done参数传递给test,所以它没有等待它被调用并提前完成测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56987126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档