【问题标题】:All imports are undefined for one module during Jest test run在 Jest 测试运行期间,一个模块的所有导入都未定义
【发布时间】:2021-08-17 05:54:34
【问题描述】:

Jest、create-react-app 和 typescript 的奇怪错误。

Tonight Jest 开始无法正确导入我的“./ProcessStore”模块。这个模块是我的测试导入的东西的传递依赖。

我看到的错误是我导入的东西是未定义的。

当我执行import * as what from "./ProcessStore" 和 log(what) 时,它会打印所有导出,但值未定义。就像{default: undefined, ResourceChange: undefined} 导出的两个类。应该是{default: <a class>, ResourceChange: <a class>}

这只是一个文件。其他所有文件都有效。

当我使用 npm start 时,它可以工作 --- 这是一个 Jest 唯一的问题。

此外,如果我将损坏的文件重命名为 ./ProcessStore2,它也可以工作。

我试过./node_modules/jest --clearCache,但没有帮助。

如果它是相关的,我通常使用 craco。暂时切换回 react-scripts 并没有帮助。

我正在使用 react-scripts 4.0.3(最新版本)。

发生了什么事?我该如何解决这个愚蠢的问题?

【问题讨论】:

    标签: reactjs typescript jestjs create-react-app


    【解决方案1】:

    这是由我的项目中的循环依赖引起的。

    循环依赖导致 Jest 返回一个空模块。我相信第二次进入一个模块,它会有未定义的内容。

    在我的例子中,链条是ProcessStore.ts -> stores.ts -> ProcessStore.ts。所以当stores.ts 加载ProcessStore.ts 时,进程存储已经加载,所以一切都是未定义的。

    【讨论】:

    • 那你是怎么解决的?您是否删除了循环依赖?我问是因为我有完全相同的问题,但消除循环依赖将是一项艰巨的工作......
    • @drazewski 是的,不幸的是我确实修复了循环部门。可能有不同的修复方法,但我不知道。
    【解决方案2】:

    我在导入这样的文件时遇到了这个问题

    import { myHook } from 'services/hooks/myHook'
    

    在另一个文件中

    import { myHook } from 'services/hooks'
    

    有一个索引文件

    // src/services/hooks/index.ts
    export * from './myHook.ts'
    

    将它们全部转换为使用修复它的索引路径。我不认为我在任何地方都有循环依赖,我永远无法真正理解问题所在。

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2015-07-21
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多