模拟use-History挂钩的react-router-dom会导致以下错误-TS2698:传播类型只能从对象类型创建

wentjun

我正在尝试react-router-dom在一个测试用例中进行模拟,以使该useHistory挂钩在我的测试中起作用。我决定使用jest.mock来模拟整个模块,并jest.requireActual保留我可能不想模拟的其他属性。

jest.mock('react-router-dom', () => ({
  ...jest.requireActual('react-router-dom'),
  useHistory: () => ({
    location: {
      pathname: '/list',
    },
  }),
}));

这实际上是从以下问题的高度评价的解决方案之一得出的:如何在嘲笑中模拟useHistory挂钩?

但是,TypeScript编译器在下一行标记了以下错误 ...jest.requireActual('react-router-dom'),

TS2698:传播类型只能从对象类型创建。

有趣的是,我仅在将jest和ts-jest更新到最新版本(jest v26)之后才遇到此问题。使用jest 24.xx时,我没有遇到任何这些问题

"@types/jest": "^26.0.4",
"jest": "^26.1.0",
"ts-jest": "^26.1.1",

有谁知道如何解决最新的玩笑版本的问题?

那将是烧瓶

jest.requireActual返回unknown无法传播的类型。

正确的类型是:

import * as ReactRouterDom from 'react-router-dom';

jest.mock('react-router-dom', () => ({
  ...jest.requireActual('react-router-dom') as typeof ReactRouterDom,
  useHistory: ...,
}));

一个快速的解决方法是any

jest.mock('react-router-dom', () => ({
  ...jest.requireActual('react-router-dom') as any,
  useHistory: ...,
}));

这是可以接受的,因为在这种情况下它不会损害类型安全性。

由于react-router-dom是ES模块,因此模拟它的更正确方法是:

jest.mock('react-router-dom', () => ({
  ...jest.requireActual('react-router-dom') as any,
  __esModule: true,
  useHistory: ...,
}));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我收到错误消息“只能从对象类型创建扩展类型。ts(2698)”

react-router-dom:无效的挂钩调用,只能在函数组件主体内部调用挂钩

react-router:类型中缺少'history'

react-router-dom与react挂钩不起作用

React Router DOM历史记录对象导致打字稿错误

react-router-dom 元素类型无效

如何在 react-router-dom 中模拟 useNavigate 钩子

无法读取未定义的属性“ history”(React Router 5的useHistory挂钩)

react-router-dom TypeScript TS2322:类型“ typeof Index”无法分配给类型

使用react-router-dom的history.push

如何使用Jest模拟新的React Router Hooks的history.push

使用React-Router-Dom创建PrivateRoute

打字稿:传播类型只能从对象类型创建

TypeScript和NestJs:只能从对象类型创建传播类型

模拟React-Router-dom useHistory和其他带有笑话的钩子

我如何使用__mocks__目录中的玩笑来模拟react-router-dom

React Router的路径的TypeScript类型?

React Router 4 类型无效

配置react-router-dom会产生错误:不变失败:您不应在<Router>外使用<Link>

React Router Dom 击中了错误的端点

如何停止对来自 React-Router-Dom 的 Link 元素的传播?

尝试将react-transition-group实施为react-router会产生错误:“元素类型无效...”

模拟JavascriptDeserializer会导致错误

在 react-router-dom v6 中的 history.replace

React-router-dom如何在不使用History的情况下使用goBack函数

react-router-dom-链接和history.push之间的区别?

react-router-dom失败的道具类型:类型为“字符串”的道具“精确”无效

在react-router中,this.context.router的类型是什么?

react-router-dom匹配对象isExact false