为什么 jest.isolateModules 没有按预期工作?

Dav*_*ein 5 reactjs jestjs react-hooks

我想放弃使用,jest.resetModules因为我想重置两个模块,但在所有运行中保留一个模块。

我原来让事情正常工作的代码是这样的:

beforeEach(() => {
  jest.resetModules();
  require('hooks/useMyProvider');
  const useMyProvider = require('#/');
  api = useMyProvider(); // scoped above
})
Run Code Online (Sandbox Code Playgroud)

然后在每次测试中,我都会做这样的事情:

// 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 />);
Run Code Online (Sandbox Code Playgroud)

我尝试重构为useMyProvider在文件顶部定义一次并jest.resetModules从 ; 中beforeEach删除

然后我这样做了:

let MyComponent;

jest.isolateModules(() => {
  jest.doMock('#/hooks/useActive', () => {
    return () => {
      return [true]
    }
  });

  MyComponent = require('#/components/MyComponent')
});

const { container } = render(<MyComponent />);
Run Code Online (Sandbox Code Playgroud)

当我在两次测试中执行此操作并在返回时进行交换时truefalse无论哪个测试先进行都会坚持下去。自从我隔离了模块以来,我预计它每次都会改变。