Skip to content

visualjerk/await-promises

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Test asynchronous code with ease

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages