jasmine - 如何等待使用 axios-mock-adapter 完成请求,就像使用 moxios 一样?

标签 jasmine moxios axios-mock-adapter

从服务器获取某些内容后,我尝试测试它的渲染。
我用 Vue Test Utils但这无关紧要。

created使用 axios 进行 ajax 调用的组件的 Hook .我注册了axios-mock-adapter响应并“渲染”组件,进行调用,一切正常,但我必须使用 moxios lib 只是等待请求完成。

it('displays metrics', (done) => {

  this.mock.onGet('/pl/metrics').reply((config) => {
    let value = 0
    if (config.params.start == '2020-01-26') {
      value = 80
    }
    if (config.params.start == '2020-01-28') {
      value = 100
    }
    return [200, {
      metrics: [
        {
          key: "i18n-key",
          type: "count",
          value: value
        }
      ]
    }]
  })
  .onAny().reply(404)

  let wrapper = mount(Dashboard)

  moxios.wait(function() {
    let text = wrapper.text()
    expect(text).toContain('80')
    expect(text).toContain('100')
    expect(text).toContain('+20')
    done()
  })
})

有没有可能摆脱moxios并通过 axios-mock-adapter 实现相同的效果只要?

最佳答案

是的,您可以实现自己的flushPromises带有异步/等待的方法:

const flushPromises = () => new Promise(resolve => setTimeout(resolve))

it('displays metrics', async () => {
  this.mock.onGet('/pl/metrics').reply((config) => {
    // ..
  }).onAny().reply(404)

  let wrapper = mount(Dashboard)

  await flushPromises()

  expect(text).toContain('80')
})

或使用 donesetTimeout :

it('displays metrics', (done) => {
  this.mock.onGet('/pl/metrics').reply((config) => {
    // ..
  }).onAny().reply(404)

  let wrapper = mount(Dashboard)

  setTimeout(() => {
    expect(text).toContain('80')
    done()
  })
})
moxiois.wait简单 schedules a callback with setTimeout .这是因为 setTimeout 调度的任务总是在微任务队列(如 promise 回调)被清空后运行。

关于jasmine - 如何等待使用 axios-mock-adapter 完成请求,就像使用 moxios 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53009324/

相关文章:

reactjs - 为什么我的 api 模拟会返回 404 错误?

unit-testing - 使用 axios-mock-adapter 模拟 axios 得到未定义的响应

javascript - 用Javascript重写单元测试可以吗?

javascript - Jasmine SpyOn 关于函数调用

reactjs - 如何修复 axiosInstance.get ('url' 失败的 moxios 测试。then(...).finally 不是一个函数

testing - Moxios - 类型错误 : Cannot read property 'adapter' of undefined

javascript - Jest 的 Marble 测试失败,但 Jasmine 的等效测试成功

javascript - 用 jasmine .toEqual 比较两个不同的对象,一个对象是空的,另一个对象有一个 key 是一个符号,为什么它说它们相等?

vue.js - 使用 moxios 和 fakeTimers 测试去抖异步请求

react-redux - 如何在 redux-saga 中测试异步 axios 请求?