Mock promisified function

The code

1
2
3
4
5
6
import MyClass from 'my-module';

const myObject = new MyClass('param-1', 'param-2');
const createPromise = promisify(myObject.create).bind(myObject);

const result = await createPromise('some-param');

The test

1
2
3
4
5
6
7
8
9
10
11
const mockCreate = jest.fn((_params, callback) => {
callback(null, { foo: 'bar' });
});

jest.mock('my-module', () => {
return jest.fn().mockImplementation(() => ({
create: mockCreate,
}));
});

expect(mockCreate).toHaveBeenCalledTimes(1);

Mock non-class module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import * as someModule from 'my-module';

jest.mock('my-module');

const mockFunc1 = jest.spyOn(someModule, 'func1');

// alternative of mockFunc1.mockReturnValue('non promise result')
mockFunc1.mockImplementation(() => 'non promise result');

// alternative of mockFunc1.mockResolvedValue('promise result')
mockFunc1.mockImplementation(() => Promise.resolve('promise result'));

// alternative of mockFunc1.mockRejectedValue(new Error('unknown error'))
mockFunc1.mockImplementation(() => { throw new Error('unknown error'); });