在 Jest 测试期间,一个模块的所有导入均未定义 运行

All imports are undefined for one module during Jest test run

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

今晚 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(最新版本)。

这是怎么回事?我该如何解决这个愚蠢的问题?

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

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

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

当我像这样导入一个文件时,我运行进入了这个

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

在另一个文件中

import { myHook } from 'services/hooks'

有一个索引文件

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

将它们全部转换为使用索引路径修复了它。我不认为我在任何地方都有循环依赖,我从来没有能够真正理解哪里出了问题。