Jest.js 如何在另一个测试中更改useContext中设置的值?

ajsxfq5m  于 2023-10-14  发布在  Jest
关注(0)|答案(1)|浏览(118)

下午好,首先感谢大家的关注。
我为一个文件创建了一个测试,该文件具有使用useContext的存储依赖项。
为了能够测试这个文件,我添加了如下商店:

jest.mock('react', () => {
  const ActualReact = jest.requireActual('react');
  return {
    ...ActualReact,
    useContext: () => {
      return {
        form: {
           email: {
             id: 'name',
             name: 'nameTeste',
             value: 'teste',
          },
        },
      };
    },
  };
});

在下一个测试中,我想将默认值更改为另一个值,例如。

it('should return field required', () => {
 
  jest.mock('react', () => {
    const ActualReact = jest.requireActual('react');
      return {
        ...ActualReact,
        useContext: () => {
          return {
            form: {
              email: {
                id: 'email',
                name: 'email',
                value: '[email protected]',
             },
           },
         };
       },
     };
   });
    validateField('[email protected]', 'email');
    expect(mock.setErrorForm).toHaveBeenCalledWith('email', 'Este campo es requerido.');
  });

如何更改预定义的值?

jk9hmnmh

jk9hmnmh1#

嘲笑整个react模块听起来不太理想,但如果你仍然热衷于这样做,我们基本上可以使用doMock
让我们阅读文件中提到的一些规则,例如:
静态ES6模块导入被提升到文件的顶部,因此我们必须使用import()动态导入它们。
简而言之,这里是你需要做的:

// reset your modules again
beforeEach(() => {
  jest.resetModules();
});

test('test 1', async () => {
  // do mock `react` beforehand
  jest.doMock(`react`, () => {
    return {
      ...jest.requireActual('react'),
      useContext: () => {
        return {
          // ...
        };
      },
    };
  });

  // dynamic import your component
  const { default: Component } = await import('./YourComponent');
  
   // more code goes here ...
})

// likewise, more test goes here with the same pattern

相关问题