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!
DISCUSSION (1)

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 Sep 27

Some tips to improve your life

For some time now I've been looking for and researching ways to improve my life...

Nested Software
“Of course, you only live one life, and you make all your mistakes, and learn what not to do, and that's the end of you.” -- Feynman, Surely You're Joking
Sign up (free forever)

dev.to is where software developers stay in the loop and avoid career stagnation.