I just updated react-scripts to 4.0 which includes Jest@26 and some accompanying test packages here's the package.json diff:
After upgrading, some Jest mocks have begun to fail. It seems like the mocked return value is just undefined? Am I missing something? Here's one of the failing mocks
import useFetch from "use-http";
jest.mock("use-http", () => ({
__esModule: true,
default: jest.fn()
}));
describe("the user context", () => {
beforeAll(() => {
useFetch.mockReturnValue({
get: async () => Promise.resolve({ foo: 666 }),
response: { ok: true }
});
});
Tests that try to utilize the 'get' method fail with:
TypeError: Cannot destructure property 'get' of '(0 , _useHttp.default)(...)' as it is undefined.
And another that isn't default, doesn't import the package for one-time mocks:
jest.mock("_hooks", () => ({
useBaseUrls: jest.fn().mockReturnValue({
app: "bar"
})
}));
Tests that access the 'app' property throw TypeError: Cannot read property 'app' of undefined
Jest 26 changed the default behavior of resetMocks
to true, which resets mock state before each test.
You can revert to the prior behavior by disabling resetMocks
in package.json
"jest": {
"resetMocks": false
}
A discussion to change the default back again is currently an open issue on their Github: https://github.com/facebook/create-react-app/issues/9935
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With