Ava 在 addEventListener() 上测试 setTimeout()
Ava test setTimeout() on addEventListener()
我有这个功能,我想用 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()
都没有用。请帮忙。
async-await 可能很棘手。测试可能在调用异步回调之前结束。由于没有返回承诺(异步),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()
})
})
我有这个功能,我想用 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()
都没有用。请帮忙。
async-await 可能很棘手。测试可能在调用异步回调之前结束。由于没有返回承诺(异步),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()
})
})