'Handle async imports in jest.mock factory

I am reusing db mocks in different tests so I created aka factories for mocking a single table and calling them in jest.mock()

jest.mock('db', () => {
  const {
    UsersMockFactory,
    RequestMockFactory
  } = jest.requireActual('../../../../mocks');

  return {
    Users: UsersMockFactory(),
    Requests: RequestMockFactory(),
  };
});

The problem is that 19 tests will pass with mock from that file but 20th will throw an error RequestMockFactory is not a function.

I've tried using const mocks = require('../../../../mocks') and then console.log the result but RequestMockFactory still wasn't there for some reasons. I don't know why but it is the main reason I have this problem. I've tried to use await import() like this and it imports correctly:

jest.mock('db', async () => {
 const {
    UsersMockFactory,
    RequestMockFactory,
  } = await import('../../../../mocks');

return {
    Users: UsersMockFactory(),
    Requests: RequestMockFactory(),
  };
});

Now the problem is that mock factory returns a Promise for an entire mock and obviously methods on a model are undefined.

I've tried to mock inside describe() , beforeAll(), inside it() - jest.mock is not working there.

How to handle imports in jest.mock without such pain?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source