JestJS - Trying to Mock Async Await in Node JS Tests

16,440

You should be careful about somethings below:

This is my example:

import testData from '../data.js';
import { handler } from '../src/index.js';
import * as Utils from '../../../utils'


jest.mock('../../../utils');
beforeAll(() => {
  Utils.callAnotherLambdaFunction = jest.fn().mockResolvedValue('test');
});

describe('>>> SEND EMAIL LAMBDA', () => {
  it('should return a good value', async () => {
    const callback = jest.fn()
    await handler(testData, null, callback);
    expect(callback).toBeCalledWith(null, {success: true, returnValue: 'test'})
  });
})
Share:
16,440
andre
Author by

andre

Updated on June 20, 2022

Comments

  • andre
    andre almost 2 years

    I am attempting to use Jest for my Node Js Test (specifically AWS's Lambda) but I am having difficulty mocking async await functionality.

    I am using babel-jest and jest-cli. Below are my modules. I am getting to the first console.log, but the second console.log returns undefined and my test crash.

    Any ideas on how to implement this?

    Below is my module:

    import {callAnotherFunction} from '../../../utils';
    
      export const handler = async (event, context, callback) => {
    
      const {emailAddress, emailType} = event.body;
      console.log("**** GETTING HERE = 1")
      const sub = await callAnotherFunction(emailAddress, emailType);
      console.log("**** Not GETTING HERE = 2", sub) // **returns undefined**
    
      // do something else here
      callback(null, {success: true, returnValue: sub})
    
    }
    

    My Test

    import testData from '../data.js';
    import { handler } from '../src/index.js';
    jest.mock('../../../utils');
    
    beforeAll(() => {
      const callAnotherLambdaFunction= jest.fn().mockReturnValue(Promise.resolve({success: true}));
    });
    
    describe('>>> SEND EMAIL LAMBDA', () => {
      test('returns a good value', done => {
        function callback(dataTest123) {
          expect(dataTest123).toBe({success: true, returnValue: sub);
          done();
        }
    
        handler(testData, null, callback);
      },10000);
    })