javascript - 模拟 useSelector 具有不同的值

标签 javascript reactjs jestjs

我正在尝试这样的事情:

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

然后尝试做这样的事情:

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

这会给我一个错误:

The module factory of jest.mock() is not allowed to reference any out-of-scope variables.

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

最佳答案

简化版本,也可以使用:

import * as redux from 'react-redux'

jest
  .spyOn(redux, 'useSelector')
  .mockReturnValueOnce('first call')

此外,最好只 stub 存储的必要部分,而不是依赖于对 mockReturnValueOnce 的多次调用:

const locale = 'en'

const state = {
  application: { locale },
}

jest
  .spyOn(redux, 'useSelector')
  .mockImplementation((callback) => callback(state))

关于javascript - 模拟 useSelector 具有不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291008/

相关文章:

Javascript,无法读取 JSON 格式的字符串

Javascript 如何删除日语/中国日元符号

javascript - 如何使用 jQuery/JS 单击没有 ID 的按钮

javascript - 如何使用 React 中的 Children 属性删除组件

reactjs - 当我使用 react 测试库、react.lazy 和 suspense Jest 运行相同的测试两次时,为什么加载程序没有在第二次测试中显示?

javascript - 具有动态路由的页面加载看起来相同

javascript - Draft JS 从 HTML 识别 img

javascript - 当另一个组件发生更改时,React 重新渲染组件

unit-testing - 模拟 Vuex getter 进行单元测试会产生意想不到的结果

jestjs - 我可以在 NestJS 中的 .spec.ts 之外使用 Jest 的 Expect() 吗?