我正在尝试这样的事情:

const useSelector = jest.fn();
jest.mock('react-redux', () => ({
  useSelector,
}));


然后尝试做这样的事情:

useSelector.mockReturnValueOnce({});
shallow(
  <ComponentUsingUseSelector />
);


那会给我一个错误:


  jest.mock()的模块工厂不允许引用任何范围外的变量。


因此,如果我不能使用超出范围的变量进行模拟,那么我将如何为每个测试返回不同的值?

最佳答案

在阅读了大量不符合我(想)要做的文章和文档之后,以下内容似乎可以工作:终于找到了一个。

import { useSelector } from 'react-redux';

jest.mock('react-redux', () => ({
  useSelector: jest.fn(),
}));


describe('some test', () => {
  it('do something', () => {
    useSelector.mockImplementation(() => ('hello world'));
    shallow(
      <ComponentUsingUseSelector />
    );


如果多次调用,我可以执行以下操作:

describe('some test', () => {
  it('do something', () => {
    useSelector.
      .mockReturnValueOnce('first call')
      .mockReturnValueOnce('second call')
    shallow(
      <ComponentUsingUseSelector />
    );

09-29 23:00