Я хочу отойти от использования jest.resetModules
, поскольку хочу сбросить два модуля, но оставить один на всех прогонах.
Мой оригинальный код, чтобы заставить все работать как-то так, был плох:
beforeEach(() => {
jest.resetModules();
require('hooks/useMyProvider');
const useMyProvider = require('#/');
api = useMyProvider(); // scoped above
})
Затем в каждом тесте я делал бы что-то вроде этого:
// Mock hook since we can't spy on a function
jest.doMock('#/hooks/useActive', () => {
return () => {
return [true]
}
});
// re-require the component that requires useActive so it pulls latest mock
let MyComponent = require('#/components/MyComponent')
const { container } = render(<MyComponent />);
Я попытался выполнить рефакторинг, чтобы useMyProvider
был определен один раз в верхней части файла и удалил jest.resetModules
из beforeEach
;
Затем я сделал это:
let MyComponent;
jest.isolateModules(() => {
jest.doMock('#/hooks/useActive', () => {
return () => {
return [true]
}
});
MyComponent = require('#/components/MyComponent')
});
const { container } = render(<MyComponent />);
Когда я сделал это вдва теста, и взамен true
на false
в ответе, какой бы тест ни пришел первым, он остановится.Я ожидал, что это будет меняться каждый раз, когда я изолировал модули.