React Jest/Enzyme 测试:useHistory Hook 破坏测试

2024-03-21

我对 React 还很陌生,所以请原谅我的无知。我有一个组件:

const Login: FunctionComponent = () => {

    const history = useHistory();

    //extra logic that probably not necessary at the moment

    return (
        <div>
            <form action="">
                ...form stuff
            </form>
        </div>
    )
}

当尝试编写笑话/酶测试时,我编写的一个测试用例失败并出现以下错误 ` › 遇到声明异常

TypeError: Cannot read property 'history' of undefined`

我尝试使用 jest 来模拟 useHistory,如下所示:

jest.mock('react-router-dom', () => ({
    useHistory: () => ({ push: jest.fn() })
}));

但这没有任何作用:(并且我得到了同样的错误。任何帮助将不胜感激

UPDATE:

所以我想通了。我走在正确的道路上,为useHistory()钩子,我定义在错误的地方。需要在测试方法的范围之外定义模拟(至少对于 useHistory),例如:

import { shallow } from 'enzyme';
import React from 'react';
import Login from './app/componets/login.component';

jest.mock('react-router', () => ({
    ...jest.requireActual('react-router'),
    useHistory: () => ({ push: jest.fn() })
}));

/**
 * Test suite describing Login test
describe('<LoginPage>', () => {
    test('should test something', () => {
         //expect things to happen
    });
})

通过上述测试运行,不会因历史未定义而失败。


所以我想通了。通过为 useHistory() 挂钩创建模拟,我走上了正确的道路,我只是在错误的位置定义了它。结果模拟需要在测试方法的范围之外定义(至少对于 useHistory),例如:

import { shallow } from 'enzyme';
import React from 'react';
import Login from './app/componets/login.component';

jest.mock('react-router', () => ({
    ...jest.requireActual('react-router'),
    useHistory: () => ({ push: jest.fn() })
}));

/**
 * Test suite describing Login test
 */
describe('<LoginPage>', () => {
    test('should test something', () => {
         //expect things to happen
    });
})

通过上述内容,测试运行不会因历史记录未定义而失败。

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

React Jest/Enzyme 测试:useHistory Hook 破坏测试 的相关文章

  • React Native 将样式设置为 State

    我想用backgroundColor of style1作为一种状态 并在函数中改变它change 我怎样才能访问style1 我的观点是调用该函数change从另一个函数 使按钮将其颜色更改为黄色 然后在一段时间后再次将其颜色更改为蓝色
  • 当react-redux中redux存储的非相关部分更新时组件重新渲染

    我注意到我的一些组件在我不期望的情况下重新渲染 可以说我有一个
  • React + 路由器 + Google 标签管理器

    我花了一些时间在 Quickcypher com 上开发 MVP 我想开始进行一些分析 它对于跟踪总访问量非常有用 但是当我尝试跟踪使用 React Router 的网站上的不同 URL 时 情况却出问题了 我的方法是这样的 设置一个在某些
  • IdentityServer4 无法在生产环境中运行

    我正在使用 IdentityServer4 和 ASP NET Core 3 0 的 React 启动项目 预览版 4 一直运行良好 直到我构建解决方案并尝试使用 dotnet 命令从 cmd 提示符运行它 每次启动应用程序时 它都会告诉我
  • 在 NextJS 上运行开发服务器(在网络上)

    在使用 ReactJS 时 当我们使用命令 npm start 时 它会在 localhost 3000 以及网络 192 168 1 2 3000 上启动开发服务器 这非常简单 我可以通过进入该地址在所有设备上测试我的应用程序 最近我开始
  • CI 中带有打字稿路径的玩笑“找不到模块”

    在 Gitlab CI 环境中 我们的 Jest 测试中有 2 个失败 并显示Cannot find module 奇怪的是 它可以在我本地的 Win10 机器上运行 即使我在类似的 docker container 中运行测试 node
  • useEffect 中的 useState 不更新状态

    我是 React Hooks 新手 正在使用 React 16 13 1 我要实施Auth能够处理登录的组件 但似乎没有更新状态currentUser正确地 尽管setCurrentUser使用响应对象调用 这段代码有什么问题 import
  • JSX 中的混合运算符

    我想在 JSX 中使用混合运算符 例如 datas datas map function data i return
  • ESLint 如何集成到 Create React App 中?

    当我跑步时npx create react app some name 为我创建了一个简单的 React 项目 当我随后窥视package json 似乎有一些 ESLint 存在的证据 因为有 eslintConfig extends r
  • React hooks 如何确定它们所属的组件?

    我注意到 当我使用反应钩子时 子组件的状态更改不会重新渲染没有状态更改的父组件 通过此代码沙箱可以看到这一点 https codesandbox io s kmx6nqr4o https codesandbox io s kmx6nqr4o
  • 我无法在我的反应本机上使用加载的应用程序。它不会正常工作

    我不断收到此错误 错误截图 https i stack imgur com 88KPa png 这是我用来导入自定义谷歌字体的代码 import React useState from react import Home from scre
  • React 状态总是从 Fabricjs 的回调中返回先前(或初始)状态

    下面的代码是我的最小问题重现组件 它初始化织物画布 并处理 模式 状态 模式状态决定画布是否可以编辑 并且一个简单的按钮控制该状态 问题是 即使mode setMode工作正常 意思是 单击按钮后组件分析器显示正确的状态 按钮内的文本也显示
  • React + Mobx:尝试更新存储时“this”为空

    刚刚开始使用 Mobx 和 React 在更新商店时遇到困难 单击按钮时出现错误 这应该更新 me 属性 Store js 12 Uncaught TypeError Cannot set property me of null 我的商店
  • React i18next languageChanged 事件被多次调用

    我在我的 React js 应用程序中使用 i18next 进行翻译 我在 Header jsx 文件中添加了所有页面通用的语言下拉列表 我正在根据其中一个页面中的当前语言获取数据quiz jsx 因此 在语言更改时应该再次调用 api 问
  • 在 Jest 测试中设置时刻时区

    我有 util 函数 它以特定的日期格式解析给定的日期 即 2019 01 28 然后使用momentJS检索当天的开始并将其转换为 ISO 日期格式 dates js import moment from moment export co
  • React 路由器路由加载器不适用于嵌套组件

    我正在使用 React Router v6 我想在组件加载之前使用新的加载器来加载数据 所以我有以下内容 在我的index js中 const router createBrowserRouter createRoutesFromEleme
  • 从外部material-ui组件访问主题

    我有一个使用标准深色主题的主题提供商 我希望能够从我自己的自定义组件访问该主题的详细信息 但我不知道如何做到这一点 在下面的例子中 this props theme未定义 ReactDOM render
  • 如何使用 JSX 和 Lodash 重复一个元素 n 次

    我在我的应用程序中使用 React JSX 和 Lodash 来实现我想要的 我需要根据条件重复某个元素一定次数 我该怎么做呢 这是元素 span span 我这样分配它 let card if data hand 8 or more ca
  • React setState回调返回值

    我是 React 新手 我希望实现这种流程 set the state execute a function f an async one which returns a promise set the state again return
  • 如何在 getStaticPaths 内添加 params 值数组

    我有一个页面 其结构如下 read slug number 我想要得到slug每个对应的值number in the getStaticPaths这是代码 export async function getStaticPaths const

随机推荐

  • Web Components(原生UI)之间如何通信?

    我正在尝试为我的一个 UI 项目使用本机 Web 组件 对于这个项目 我没有使用任何框架或库 例如 Polymer 等 我想知道是否有最好的方法或其他方式在两个项目之间进行通信像我们在 AngularJS Angular 中所做的那样的 W
  • Flexslider - 动画:“幻灯片”,animationLoop:“true” - 冲突

    我有一个问题弹性滑块2 http www woothemes com flexslider在某些特定情况下 我将它用作内容滑块 我需要的是让动画幻灯片而不是淡入淡出 并循环播放幻灯片 我有 3 张幻灯片 其中包含 div 内容和更多列表 以
  • 致命错误:调用成员函数 getKeyName()

    我是 joomla 的新手 我创建了一个 joomla 组件 当我单击管理中的新按钮时 我收到这样的错误 致命错误 在 C xampp htdocs Joomla1 libraries joomla application componen
  • 现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?

    多年前 Unix 密码的长度限制为 8 个字符 或者如果密码长度超过 8 个字符 那么多余的字符也不会产生任何影响 大多数现代 Unix Linux 系统上仍然是这种情况吗 如果是这样 大约什么时候在大多数系统上可以使用更长的密码 有没有一
  • 将双精度数字舍入为以位数给定的较低精度的有效方法

    在 C 中 我想将双精度舍入到较低的精度 以便可以将它们存储在关联数组中不同大小的存储桶中 与通常的舍入不同 我想舍入到多个有效位 因此 大数字的绝对变化将比小数字变化大得多 但它们往往会按比例变化 因此 如果我想四舍五入到 10 个二进制
  • 为什么这个具有推导返回类型的内联方法尚未定义?

    include
  • RadGrid 底部的水平滚动空白

    我正在使用 RadGrid 从数据库检索数据 我的 RadGrid 中有更多列 因此我需要显示 RadGrid 水平滚动以防止页面扩展 但禁用垂直滚动 因此网格的高度应扩展以始终显示网格中的所有行 我得到了结果 但 RadGrid 底部有空
  • 使用 Chosen 链接选择

    我正在尝试将选择与Chosen https github com harvesthq chosen and Chained http www appelsiini net projects chained但我不确定我是否正确实现了 chos
  • 文件观察器创建事件

    我正在使用 net 文件监视程序监视文件夹中的某些类型的文件 mbxml 我正在使用 filewatcher 创建的事件 一旦创建的事件触发 我必须将此文件移动到另一个文件夹 这种方法的问题在于 一旦文件复制开始 就会触发创建的事件 因此
  • 存储用户时区的最佳实践 - TSQL/.Net

    我需要跟踪用户的时区 以便在他们指定的特定时间 在他们自己的时区 处理他们的信息 或不处理 显而易见的答案是将时区及其个人资料信息存储在用户数据库中 有点棘手的是夏令时 从下图中请注意 大多数北部和南部地区使用夏令时偏移 因此 存储时区偏移
  • 防止 PHP 脚本在运行时耗尽所有资源?

    我有一个每日 cron 作业 运行大约需要 5 分钟 它会收集一些数据 然后更新各种数据库 它工作正常 但问题是 在这 5 分钟内 该站点完全没有响应任何请求 无论是 HTTP 还是其他请求 看起来 cron 作业脚本在运行时会占用所有资源
  • 使用基数排序实现 std::sort 重载是否合法?

    对于适用的数据类型 良好的基数排序可以大幅击败比较排序 但是std sort通常作为 introsort 实现 有没有理由不使用基数排序来实现std sort 基数排序不足以实现std sort因为std sort仅要求类型具有可比性 但对
  • Flutter:固定高度容器内的可滚动列子项

    我有一些容器里面一个ListView这将导致可滚动内容在一个页面内 每个容器都有一个 Column 作为子容器在列中 我有一个标题和一个分隔线 然后是实际内容 我希望其中一个容器是这样的 Title divider Scrollable c
  • Windows8:设备标识符

    我目前正在尝试检索唯一的设备标识符 这是我的代码 var token Windows System Profile HardwareIdentification getPackageSpecificToken null var reader
  • 如何在新页面上显示 AJAX 响应

    我正在phonegap中开发移动应用程序并使用intel xdk 我想在新的html页面上显示ajax响应我在google上搜索并找到了这个解决方案window open 但这种方法对我不起作用并显示空白 白屏 我想显示我的数据search
  • pyqt中GUI的模型视图实现错误

    当我关闭应用程序时 以下示例代码因此错误而崩溃 QBasicTimer start QBasicTimer can only be used with threads started with QThread 这是我的代码 import s
  • 如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

    我是 django 和 jquery 的新手 我正在开发一个基于 django 的应用程序 其中表单中有 3 个下拉列表 1 校园 2 学校 3 中心 层次结构是校园有学校 学校有中心 我想将这些下拉菜单相互链接 例如 我有 3 个校区 即
  • 不同分区中的 COM+ 对象激活

    我创建了一个 COM 域分区 然后将其映射到 Windows 2008 服务器计算机 并将 COM 应用程序导入其中 我尝试使用以下 C 代码远程激活服务器上特定分区中的对象 partition guid Guid guidMyPartit
  • Spring Data JPA - 多对多查询

    我有两个实体 人物 和 电影 Entity public class Person some fields ManyToMany fetch FetchType LAZY mappedBy actors OrderBy id private
  • React Jest/Enzyme 测试:useHistory Hook 破坏测试

    我对 React 还很陌生 所以请原谅我的无知 我有一个组件 const Login FunctionComponent gt const history useHistory extra logic that probably not n