Leonardo Drici
Leonardo Drici

Reputation: 789

Jest check when async function gets called

I'm trying to test whether an async function (fire and forget) gets called.

Content.js

  export async function fireAndForgetFunction() {
    ...  
  }

  export async function getData() {
    ...
    fireAndForgetFunction()
    return true;
  }

I would like to test if fireAndForgetFunction has been called more than once.

Current test

  import * as ContentFetch from '../Content';

  const { getData } = ContentFetch;
  const { fireAndForgetFunction } = ContentFetch;

  it('test',async () => {
    const spy = jest.spyOn(ContentFetch, 'fireAndForgetFunction');

    await getData();

    expect(spy).toHaveBeenCalled();
  })

The test result to an error saying

    Expected number of calls: >= 1
    Received number of calls:    0

How could I do this test?

Upvotes: 3

Views: 3596

Answers (1)

mtkopone
mtkopone

Reputation: 6443

If you don't want to await for fireAndForgetFunction in getData(), which I assume is the case, then providing a mock implementation of fireAndForgetFunction when creating the spy is your best option:

it('test', (done) => {
    const spy = jest.spyOn(ContentFetch, 'fireAndForgetFunction')
        .mockImplementation(() => {
          expect(spy).toHaveBeenCalled();
          done();
        })
    getData();
})

Upvotes: 1

Related Questions