I'm mocking an ES6 class that is imported from a node module with jest, like this:
// creating mocks
const mockMethodName = jest.fn()
jest.mock('../node_modules/my-module', () => {
const actualMyModule = jest.requireActual('../node_modules/my-module')
return {
...actualMyModule,
ClassName: jest.fn().mockImplementation(() => {
return {
methodName: mockMethodName
}
})
}
})
const { ClassName } = require('my-module')
// the test
it('does something successfully', () => {
// test logic that triggers ClassName.methodName()
expect(mockMethodName).toHaveBeenCalledTimes(1)
})
But I get the following error:
[UnhandledPromiseRejection: This error originated either by throwing inside of an async function
without a catch block, or by rejecting a promise which was not handled with .catch().
The promise rejected with the reason
"TypeError: ClassName.methodName is not a function".] {
code: 'ERR_UNHANDLED_REJECTION'
}
I've also tried defining the method mock like this:
const mockMethodName = jest.fn(() => {})
const mockMethodName = jest.fn(() => null)
const mockMethodName = jest.fn(() => true)
const mockMethodName = jest.fn(() => jest.fn)
but the error is still there.
What am I doing wrong? How do I mock the class correctly?
PS: The ClassName.methodName() method is called within an async function but ClassName.methodName() does not return a promise