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 Jun 22

My commit message workflow

Tweaks I've made to make the perfect commit message writing workflow for myself.

READ POST
Follow @shreyasminocha to see more of their posts in your feed.
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
More from @nestedsoftware
JavaScript Frustration: Classes and Class Properties Transform
#javascript #react #propertiestransform #discuss
Currying in Haskell (With Some JavaScript)
#haskell #currying #javascript
Trending on dev.to
How to create properties from variables in JSON (Part 1)
#javascript #json #howto #properties
Setting up tape testing framework for basic frontend development
#javascript #testing #beginners
Explain JavaScript Promises like I am five.
#discuss #explainlikeimfive #javascript
Why JavaScript is an OOP Language (Even Though It Doesn't Have Classes)
#javascript #computerscience #programming #programminglanguages
Understanding JavaScript Promises
#javascript
A Simple List Render Optimization For React 🏎
#javascript #react #performance #optimization
ESLint seems useless to me. Should I use it?
#javascript #eslint #beginners
You don't need Array.reduce()
#javascript #arrayreduce