Await Promises
This module makes testing asynchronous stuff easier.
You don't have to worry about every internally used promise in your tests. Just collect all promises and wait for them to finish.
Example with JEST
import AwaitPromises from 'await-promises'
it('async test', async () => {
let a = 0
const waiter = new AwaitPromises
waiter.collect()
new Promise((resolve, reject) => {
setTimeout(() => {
a++
resolve()
}, 10)
})
waiter.stop()
await waiter.wait()
expect(a).toEqual(1)
})
Example of testing a Vue transition component
import { mount, config } from '@vue/test-utils'
import MyTransition from './my-transition.vue'
import AwaitPromises from 'await-promises'
config.stubs.transition = false
describe('MyTransition.vue', () => {
it('cleans styles after enter transition', async () => {
const waiter = new AwaitPromises
waiter.collect()
const comp = {
template: `<div><my-transition><p v-show="show">foo</p></my-transition></div>`,
components: {
MyTransition
},
data() {
return {
show: false
}
}
}
const wrapper = mount(comp)
wrapper.vm.show = true
const foo = wrapper.find('p')
waiter.stop()
await waiter.wait()
expect(foo.element.style.cssText).toEqual('')
})
})
Wait helper
Await promises offers wait helper, so less boilerplate is needed when using it:
import { wait } from 'await-promises'
it('async test', async () => {
let a = 0
await wait(() => {
new Promise((resolve, reject) => {
setTimeout(() => {
a++
resolve()
}, 10)
})
})
expect(a).toEqual(1)
})
If you need to do async stuff inside the waiter, make sure to pass a async
function:
import { wait } from 'await-promises'
it('async test', async () => {
let a = 0
await wait(async () => {
await asyncFunction()
new Promise((resolve, reject) => {
setTimeout(() => {
a++
resolve()
}, 10)
})
})
expect(a).toEqual(1)
})