在Jest测试中,它说withRouter()不是函数

时间:2019-03-10 00:19:36

标签: reactjs react-router jestjs

所以我有一个React应用程序,并且为我的组件编写了许多单元测试。我的VideoNavbar组件就是这样的组件。我的测试为此运行得很好,直到我决定用withRouter()包装组件的默认导出。现在,我的Jest测试甚至无法开始运行,并出现以下错误:

FAIL test/components/AppContent/VideoNavbar/VideoNavbar.Spec.js
  ● Test suite failed to run

    TypeError: (0 , _reactRouterDom.withRouter) is not a function

同样,测试本身完全没有改变。直到我向其添加withRouter()为止,它的运行情况都很好。

为了使事情变得更加陌生,我还有一个用withRouter()包装的组件,它还具有Jest测试,并且没有收到此错误。

最后,该应用程序仍然可以完美运行。我可以将整个事情重新开始,包括VideoNavbar组件在内的所有组件都可以正常工作。只是在Jest测试中会发生这种情况。

有人对这可能是什么有任何想法吗?

编辑:这是我组件的简化版本,以显示如何导入和使用withRouter()。我遗漏了很多东西,专注于重要部分。

import React, { useState } from 'react';
import { Link, withRouter } from 'react-router-dom';

const VideoNavbar = (props) => {
    const [ isOpen, setOpen ] = useState(false);
    const { isScanning, history, startFileScan } = props;
    const pathname = history.location.pathname;

    return (
        <JsxIsHere />
    );
};

export default withRouter(VideoNavbar);

1 个答案:

答案 0 :(得分:0)

好,所以这是一个愚蠢的问题。我正在这样导入withRouter():

import { withRouter } from 'react-router-dom';

这是基于我从WebStorm获得的自动完成导入。但是,真正的导入是:

import { withRouter } from 'react-router';

有了这些,一切都会正常。