Тест Ava setTimeout () на addEventListener () - PullRequest
0 голосов
/ 05 марта 2020

У меня есть эта функция, которую я хочу проверить с ava и browser-env

function foo () {
  setTimeout(() => {
    const event = new CustomEvent('pushcommand', { detail: 'foo', bubbles: true })
    document.getElementById('command-history').dispatchEvent(event)
  }, 1)
}

Мой тестовый код:

import test from 'ava'
import foo from 'foo.js'

test('foo', t => {
  document.body.innerHTML = '<ul id="command-history"></ul>'
  document.getElementById('command-history').addEventListener('pushcommand', event => {
    t.is(event.detail, 'foo')
  })
  foo()
})

Но я получаю ошибку в ava: Error: Test finished without running any assertions. Код из прослушивателя событий выполняется, просто ava не достигает его до выхода из теста.

Кто-нибудь знает, как это исправить?

Я пытался test.serial, async await, t.end() безрезультатно. Пожалуйста, помогите.

1 Ответ

1 голос
/ 06 марта 2020

asyn c -wait может быть сложно. тест, вероятно, заканчивается до вызова обратного вызова asyn c. так как обещание не возвращается (asyn c), ava не знает, как дождаться завершения теста. что-то вроде этого должно помочь связаться с ava, чтобы дождаться окончания обещания

import test from 'ava'
import foo from 'foo.js'

function foo () {
  setTimeout(() => {
    const event = new CustomEvent('pushcommand', { detail: 'foo', bubbles: true })
    document.getElementById('command-history').dispatchEvent(event)
  }, 1)
}

test('foo', async (t) => {
  document.body.innerHTML = '<ul id="command-history"></ul>'
  await new Promise((resolve, reject) => {
    window.addEventListener('error', reject)
    document.getElementById('command-history').addEventListener('pushcommand', event => {
      t.is(event.detail, 'foo')
      resolve()
    })
    foo()
  })
})
...