I'm trying to mock the default exported part of a module, which looks like this:
// test.js
const testVariable = {
blabla: {
test: 'testContent'
}
};
export const anotherNotNeedToMockVariable = {};
export default testVariable;
The variable I actually need to mock is test.
This implementation gives me an error: Cannot spy the default property because it is not a function
// toTestModule.js
import test from './test'
export const toTestModuleFunc = async () => {
console.log('variable mocked', test.blabla.test);
return test.blabla.test;
};
import * as test from '../test'
import {toTestModuleFunc} from '../toTestModule'
describe('test', () => {
it('with jest.mock()', async () => {
const newValue = 'newValue';
jest.mock('../test', () => ({
blabla: {
test: newValue
}
}));
const value = await toTestModuleFunc();
// this fails
expect(value).toEqual(newValue);
});
it('with jest.spyOn()', async () => {
const newValue = 'newValue';
jest.spyOn(test, 'default', 'get').mockImplementation(() => {
return ({
blabla: {
test: newValue
}
});
});
const value = await toTestModuleFunc();
// this fails
expect(value).toEqual(newValue);
});
});
If I change the jest.spyOn(test, 'default') to jest.spyOn(test, 'default', 'get') it gives me another error: Property default does not have access type get
I tried to use jest.mock() function, but it does not work with that it never returns the mocked value.
I'd really apreciate any help.