jestjs - 从正在测试的组件外部访问 Context API

标签 jestjs react-testing-library

我正在使用 Jest 和 React-testing-library 来测试 React 组件。我已经使用 Context API Provider 渲染了一个组件,因此该组件可以访问 Context。不幸的是,我不知道如何从渲染组件外部访问它。在这种情况下,上下文中有一个 isUserLogged 属性,具体取决于组件的更改。但我不知道如何改变这个属性(property)的值(value)。我该如何处理这个案子?如果需要模拟 Context API,我该怎么做?

在附加的代码中,我尝试使用 useContext Hook 访问上下文。该错误表明我无法在 React 组件之外使用钩子(Hook)。而且,显然,我正在尝试访问上下文提供程序之外的上下文,因此无论如何它都无法工作。

import { Provider, Context } from '../../context';

test('Star is not clickable for a non-registered user', () => {
  const { getByTestId } = render(<Provider><Star /></Provider>);
  const isUserLogged = useContext(Context).isUserLogged; // Error.
});

最佳答案

您只需渲染您的 Provider 并传递 value 属性即可。这就是您在应用程序中执行此操作的方式。

const isUserLogged = true
render(<Provider value={{ isUserLogged }}><Star /></Provider>)

关于jestjs - 从正在测试的组件外部访问 Context API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746456/

相关文章:

jestjs - 从Jest到stdout到GitLab的代码覆盖率

reactjs - 使用 react-testing-library 时让 react-datepicker 正确显示

react-testing-library - waitForElementToBeRemoved 在传递元素时超时

javascript - 如何模拟方法或函数以返回预期错误

node.js - 在从 Node 模块导出的函数上使用 `jest.spyOn`

css - 如何在 Enzyme 中测试 CSS 悬停 - React

javascript - 如何模拟模拟find()的toArray()?

reactjs - 如何在 React 中使用 Enzyme 或 React 测试库测试 Material-UI 的响应式 UI(例如隐藏、网格、断点)

reactjs - 使用 React-testing 库提交 Formik 表单

javascript - React 测试库 + Jest : How to test a component that receives a number then format it