Reactjs 路由器组件的Gatsby/Typescript项目中偶尔出现jest故障,错误代码为TS2605

Reactjs 路由器组件的Gatsby/Typescript项目中偶尔出现jest故障,错误代码为TS2605,reactjs,typescript,jestjs,gatsby,reach-router,Reactjs,Typescript,Jestjs,Gatsby,Reach Router,自从将盖茨比项目移植到Typescript之后,我一直在与一系列零星的测试失败作斗争。以下错误在我的Jenkins CI服务器上经常发生,但几乎从不在本地发生。我有几个类似的组件使用@reach/Router中的路由器组件,这些文件中的任何一个都可能发生故障 故障信息 renderWithRouterhelper函数是从中复制的 从“React”导入React; 从'@testing library/react'导入{render}; 进口{ 创造历史, createMemorySource,

自从将盖茨比项目移植到Typescript之后,我一直在与一系列零星的测试失败作斗争。以下错误在我的Jenkins CI服务器上经常发生,但几乎从不在本地发生。我有几个类似的组件使用
@reach/Router
中的
路由器
组件,这些文件中的任何一个都可能发生故障

故障信息
renderWithRouter
helper函数是从中复制的

从“React”导入React;
从'@testing library/react'导入{render};
进口{
创造历史,
createMemorySource,
位置提供者,
}来自“@reach/router”;
const renderWithRouter=(
组件:JSX.Element,
{route='/',history=createHistory(createMemorySource(route))}={}
) => {
返回{
…渲染(
{component}
),
历史
};
};
导出默认渲染器WithRouter;
以下是我在
tsconfig.json

{
“编译器选项”:{
“allowSyntheticDefaultImports”:true,
“baseUrl”:“src”,
“esModuleInterop”:正确,
“allowJs”:false,
“声明”:虚假,
“ForceConsistentCasingFileNames”:true,
“进口者”:没错,
“jsx”:“反应”,
“lib”:[“dom”、“es2015”、“es2017”],
“模块”:“commonjs”,
“noEmitHelpers”:错误,
“noemiton”:没错,
“noImplicitAny”:没错,
“noImplicitThis”:没错,
“noResolve”:错误,
“noUnusedLocals”:正确,
“noUnusedParameters”:false,
“路径”:{
“共享/*”:[“共享/*”]
},
“保存常量枚举”:对,
“removeComments”:正确,
“rootDir”:“,
“源地图”:正确,
“strictBindCallApply”:true,
“严格检查”:正确,
“目标”:“esnext”
},
“包括”:[“/src/***]”
}
以及来自
package.json的我的依赖项

{
“依赖项”:{
“@fortawesome/fontawesome svg核心”:“^1.2.27”,
“@fortawesome/free实心svg图标”:“^5.12.1”,
“@fortawesome/react-fontawesome”:“^0.1.8”,
“@material ui/core”:“^4.9.5”,
“@material ui/图标”:“^4.9.1”,
“@types/geojson”:“^7946.0.7”,
“@types/mapbox gl”:“^1.8.0”,
“@types/qs”:“^6.9.1”,
“@types/reach\u路由器”:“^1.2.6”,
“@types/react头盔”:“^5.0.15”,
“云反应”:“^1.4.0”,
“es6承诺”:“^4.2.8”,
“盖茨比”:“^2.18.4”,
“盖茨比插件材料界面”:“^2.1.6”,
“盖茨比头盔”:“^3.1.16”,
“盖茨比插件sass”:“^2.1.24”,
“盖茨比插件类型脚本”:“^2.1.27”,
“同构提取”:“^2.2.1”,
“地图盒gl”:“^1.6.0”,
“支持mapbox gl”:“^1.2.0”,
“节点sass”:“^4.13.0”,
“反应”:“^16.12.0”,
“react dom”:“^16.12.0”,
“反应头盔”:“^5.2.1”
},
“依赖性”:{
“@测试库/jest dom”:“^5.1.1”,
“@testing library/react”:“^9.4.0”,
“@types/jest”:“^25.1.2”,
“@types/jest when”:“^2.7.0”,
“巴别塔笑话”:“^25.1.0”,
“巴别塔预置盖茨比”:“^0.2.29”,
“eslint插件jest dom”:“^2.0.0”,
“身份obj代理”:“^3.0.0”,
“玩笑”:“^25.1.0”,
“开玩笑时”:“^2.7.0”,
“更漂亮”:“^1.19.1”,
“ts玩笑”:“^25.2.0”,
“打字脚本”:“3.7.5”
}
}
最后,这里是
gatsby node.js
中的配置,用于创建
Router
组件使用的页面

const routeConfigs=[
{matcher:'^/experiments/',matchPath:'/experiments/*'},
{matcher:'^/leases/',matchPath:'/leases/*'},
{matcher:'^/properties/',matchPath:'/properties/*'},
{matcher:'^/renters/',matchPath:'/renters/*'},
{matcher:'^/specials/',matchPath:'/specials/*'},
];
exports.onCreatePage=异步({page,actions})=>{
const{createPage}=actions
//如果已设置匹配路径,则不要再次设置它。
if(page.matchPath | | page.path.match(/dev-404-page/){
返回
}
//确保路径以尾随斜杠结束,因为它可以被删除。
const path=page.path.match(/\/$/)?page.path:`${page.path}/`
routeConfigs.forEach(routeConfig=>{
if(path.match(新的RegExp(routeConfig.matcher))){
page.matchPath=routeConfig.matchPath;
createPage(第页)
}
})
}
FAIL src/pages/assets.test.tsx
  ● Test suite failed to run

    TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
    src/pages/assets.tsx:8:3 - error TS2605: JSX element type 'Router' is not a constructor function for JSX elements.
      Type 'Router' is missing the following properties from type 'ElementClass': render, context, setState, forceUpdate, and 3 more.

    8   <Router basepath='/assets'>
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/pages/assets.tsx:8:3 - error TS2607: JSX element class does not support attributes because it does not have a 'props' property.

    8   <Router basepath='/assets'>
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~