Как ждать завершения запроса с помощью axios-mock-adapter, как это возможно с moxios? - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь проверить рендеринг некоторого контента после извлечения его с сервера.Я использую Vue Test Utils, но это не имеет значения.

В хуке created компонента вызов ajax выполняется с помощью axios.Я регистрирую ответ 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?

1 Ответ

0 голосов
/ 23 ноября 2018

Да, вы можете реализовать свой собственный метод flushPromises с помощью async / await:

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')
})

Или использовать done и setTimeout:

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просто планирует обратный вызов с setTimeout.Это работает, потому что задача, запланированная setTimeout, всегда запускается после опустошения очереди микрозадач, например, обратных вызовов.

...