await-promises
DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/await-promises package

1.0.6 • Public • Published

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()
  // Run all kind of code, that invokes promises
  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'
 
// Use default vue transition comp
config.stubs.transition = false
 
describe('MyTransition.vue', () => {
  it('cleans styles after enter transition', async () => {
    // Initialize waiter
    const waiter = new AwaitPromises
    // Start collecting promises
    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)
 
    // This triggers asynchronous behaviour inside the comp
    wrapper.vm.show = true
    const foo = wrapper.find('p')
 
    // Stop collecting promises
    waiter.stop()
    // Wait until all promises have finished
    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(() => {
    // Run all kind of code, that invokes promises
    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()
    // Run all kind of code, that invokes promises
    new Promise((resolve, reject) => {
      setTimeout(() => {
        a++
        resolve()
      }, 10)
    })
  })
  expect(a).toEqual(1)
})

Package Sidebar

Install

npm i await-promises

Weekly Downloads

189

Version

1.0.6

License

MIT

Unpacked Size

5.23 kB

Total Files

4

Last publish

Collaborators

  • visualjerk