Почему jest.isolateModules не работают должным образом? - PullRequest
0 голосов
/ 16 мая 2019

Я хочу отойти от использования 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 в ответе, какой бы тест ни пришел первым, он остановится.Я ожидал, что это будет меняться каждый раз, когда я изолировал модули.

...