如何使用浅层测试酶 Reactjs 模拟 useLocation() 路径名?

2024-02-27

我有如下标头组件:

import { useLocation } from "react-router-dom";

const Header = () => {
   let route = useLocation().pathname; 
   return route === "/user" ? <ComponentA /> : <ComponentB />;
}

您将如何模拟此 useLocation() 以获取用户路径?

我不能简单地在我的测试文件中调用标题组件,因为我收到错误:

类型错误:无法读取 useLocation 处未定义的属性“位置”

describe("<Header/>", () => {
    it("call the header component", () => {
        const wrapper = shallow(<Header />);
        expect(wrapper.find(ComponentA)).toHaveLength(1);
    });
});

我尝试过看起来类似于链接如何使用新的反应路由器钩子测试组件? https://stackoverflow.com/questions/58117890/how-to-test-components-using-new-react-router-hooks但它不起作用。

我试过如下:

const wrapper = shallow(
      <Provider store={store}>
        <MemoryRouter initialEntries={['/abc']}>
          <Switch>
            <AppRouter />
          </Switch>
        </MemoryRouter>
      </Provider>,
    );
    jestExpect(wrapper.find(AppRouter)
      .dive()
      .find(Route)
      .filter({path: '/abc'})
      .renderProp('render', { history: mockedHistory})
      .find(ContainerABC)
    ).toHaveLength(1);

从链接使用浅层渲染测试react-router https://stackoverflow.com/questions/58887090/testing-react-router-with-shallow-rendering?rq=1但它不起作用。

请告诉我。

提前致谢。


我发现我可以使用以下模式模拟像 useLocation 这样的 React Router 钩子:

import React from "react"
import ExampleComponent from "./ExampleComponent"
import { shallow } from "enzyme"

jest.mock("react-router-dom", () => ({
  ...jest.requireActual("react-router-dom"),
  useLocation: () => ({
    pathname: "localhost:3000/example/path"
  })
}));

describe("<ExampleComponent />", () => {
  it("should render ExampleComponent", () => {
    shallow(<ExampleComponent/>);
  });
});

如果您在 ExampleComponent 中调用了 useLocation,则上述模式应该允许您在 Enzyme / Jest 测试中浅层渲染组件,而不会出现错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用浅层测试酶 Reactjs 模拟 useLocation() 路径名? 的相关文章

随机推荐

  • 如何使用注释排除java类在maven中编译

    我已经有一个working解决方案 我可以使用 Maven 指定在使用特定 Maven 配置文件时不编译哪些类 但我想使用通用解决方案并使用注释代替 我目前的解决方案就像
  • 伪元素内容的数据内容中的 Unicode

    我想使用 JQuery 将 unicode 放入 data content 属性中 以便将其用于伪元素内容 但我找不到正确的格式 你如何显示unicode 下面只是显示 x25BC a after content attr data con
  • Vim 从光标上次消失的位置开始

    如何让 Vim 始终从我上次退出给定文件时所在的行开始 将其放入您的 vimrc 中 When editing a file always jump to the last cursor position au BufReadPost if
  • WinForms C# 中优雅的日志窗口

    我正在寻找一种有效的方法来实现 Windows 窗体应用程序的日志窗口 过去我已经使用 TextBox 和 RichTextBox 实现了几个 但我仍然对功能不完全满意 此日志旨在为用户提供各种事件的最新历史记录 主要用于数据收集应用程序
  • 如何测量在 ubuntu 上运行的 java 应用程序的 I/O 时间?

    我想收集我的应用程序等待 I O 的时间 我正在 ubuntu linux 上运行这个 java 应用程序 我正在使用 yourkit 分析器 建议是否有其他分析工具来测量 I O 时间 Youtkit 非常适合在您的应用中使用变焦显微镜
  • 在循环中使用node-mysql插入数据

    我的代码如下 var mysql require mysql var client mysql createClient user root password root host localhost client query USE sam
  • jqgrid 增加字体大小时每个单元格周围的间距

    我使用以下 css 增加了网格单元格的字体大小 ui jqgrid ui jqgrid view font size 14px 现在 每个单元格中文本周围的间距都很小 如何增加该空间 以便较大的文本能够在每个单元格中正确显示 预先致谢 更新
  • 如何在oracle中使用DBMS_CRYPTO.encrypt函数

    我想加密数据库中的密码列 并且我正在尝试使用内部存在的加密函数DBMS CRYPTO包 已从 sys 帐户向当前用户授予执行访问权限 但出现以下错误 请举例说明如何使用此功能 select DBMS CRYPTO encrypt 12345
  • Bootstrap:将输入与按钮对齐

    为什么按钮和输入在 Bootstrap 中不能很好地对齐 我尝试了一些简单的事情 例如
  • 如何使用 PowerShell 了解 IIS 中托管的特定网站的活动会话计数

    我问了一个关于了解 IIS 中正在运行的会话计数的问题 从 IIS 获取我托管的 Asp Net 网站的运行会话计数 https stackoverflow com questions 9734561 get running session
  • 在 MS SQL Server 中隐藏表中的列

    任何人都可以分享在 SQL Server 2012 中隐藏表中特定列的步骤 因为我不想删除该列 我所说的隐藏是指每当我对特定表使用选择查询时 它永远不应该显示该列 是否可以 我需要使该列隐藏 无论任何用户登录和我使用的任何查询 第三者编辑
  • Xcode 由于 swift 中的持久容器而崩溃

    我目前正在制作一个实施核心数据的应用程序 但是 当我构建时 它在这一行崩溃 线程 1 致命错误 未解决的错误 错误 Domain NSCocoaErrorDomain Code 134140 持久存储迁移 失败 缺少映射模型 UserInf
  • 在 UIScrollView 中加载 200 多个子视图图像时程序崩溃

    我正在使用 ALAssetLibrary 开发类似的程序 例如 iPhone 中的照片 我正在尝试在滚动视图中加载图像 当相册中的图片数量较少时 一切正常 但是当我尝试加载包含 200 多张照片的相册时 我的程序结束了 没有任何错误消息 有
  • 为什么 icc 为一个简单的 main 生成奇怪的程序集?

    我有一个简单的program https godbolt org z 3KD2CM int main return 2 7 GCC 和 clang 都开启了优化 很乐意生成 2 个指令二进制文件 但 icc 给出了奇怪的输出 push rb
  • 如何在机器人框架中设置路径chrome驱动程序?

    现在 我设置路径变量 path D C Program Files Google Chrome Application Chrome C Program Files Google Chrome Application chromedrive
  • 仅当数据库中存在该表时才更新该表的 SQL

    我有一个 mySQL 数据库 可能有一个名为jason 数据库的单独实例可能没有jason表 它会有其他共同的表 我想对两个数据库运行一个简单的更新 但更新是针对jason table 我知道我可以做类似的事情 DROP TABLE IF
  • 使用索引像素格式将文本写入图像

    我有单色 TIFF 文件 1 bpp 我想向其中写入文本 当我将它们加载到 System Drawing Image 并尝试从该图像实例化 Graphics 对象时 我收到错误 无法从具有索引像素格式的图像创建 Graphics 对象 我可
  • 如何调整 UITableView 中原型单元格的左边距?

    如果我创建一个UITableViewController 例如通过文件 新项目 iOS 主从应用程序在 Xcode 中 一个UITableView是用原型单元创建的 生成的视图层次结构为 在单元格内容之间自动创建左侧 边距 UIView左边
  • 如何检查一个类是否已初始化?

    您可能会问 为什么我要这样做 这是因为我正在使用一个类 来自外部库 该类在其静态初始化程序中执行操作 并且我需要知道它是否已完成 我在看ClassLoader 但没有发现任何看起来有用的东西 有任何想法吗 您可以使用ClassLoader
  • 如何使用浅层测试酶 Reactjs 模拟 useLocation() 路径名?

    我有如下标头组件 import useLocation from react router dom const Header gt let route useLocation pathname return route user