Which JavaScript unit testing framework do you prefer?

I'm curious which unit testing frameworks people like. In particular, if you have experience testing asynchronous code, I'd love to know whether there is a best-in-class framework for that kind of thing as well as what are some best practices to unit test asynchronous code.

Did you find this post useful? Show some love!
Ben Halpern DEV.TO FOUNDER

Hey there, we see you aren't signed in.

Please consider creating an account on dev.to. It literally takes a few seconds and we'd appreciate the support so much. ❤️

I have been using Jest to test "pure" JS code and Vue.js.

Test functions can be async so you can do stuff like:

describe('getData()', () => {
  it('should get the data', async () => {
    const response = await api.getData()
    expect(response.data).toEqual("...")
  })
})

So you can use async / await. In some cases I don't have direct control on the promises the tested call generates so I use flush-promises to get the results. This is an actual test I have for a component that uploads images (using uppy that internally uses promises to do it):

  it('should mock upload an image', async () => {
    const url = 'http://dummyimage.com/100x100'
    const uppy = {
      upload: jest.fn(() => {
        vm.onUploadSuccess({}, {}, url)
      }),
    }

    wrapper.setData({ images: [image], uppy })
    wrapper.setProps({ autoUpload: false })

    const button = wrapper.find('button.upload')
    button.trigger('click')

    // 1. it should emit an empty input (to reset the value upstream)
    let inputEvent = wrapper.emitted('input')
    expect(inputEvent).toBeTruthy()
    expect(inputEvent[0]).toEqual([''])

    // triggers all the promises
    await flushPromises()

    // 2. it should emit the URL as the last input event
    inputEvent = wrapper.emitted('input')
    expect(inputEvent).toBeTruthy()
    expect(inputEvent.slice(-1)[0]).toEqual([url])
  })
Classic DEV Post from Mar 2

On résumés and applying to jobs

Tips for when you apply to a new role

READ POST
Follow @supernova32 to see more of their posts in your feed.