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

gg0vcinb  于 2022-12-08  发布在  Jest
关注(0)|答案(3)|浏览(224)

Jest、create-react-app和打字脚本出现了奇怪的错误。
今夜Jest开始无法正确导入我的"./ProcessStore"模块。此模块是我的测试导入的某个东西的可传递依赖项。
我看到的错误是我导入的内容未定义。
当我执行import * as what from "./ProcessStore"和log(what)时,它会打印所有的导出,但是值是未定义的。就像{default: undefined, ResourceChange: undefined}一样,导出了两个类。它应该是{default: <a class>, ResourceChange: <a class>}
只有一个文件,其他文件都能用
当我使用npm start时,它工作了---这是一个只有玩笑的问题。
同样,如果我将损坏的文件重命名为./ProcessStore2,它也可以工作。
我试过./node_modules/jest --clearCache,但没有用。
如果这是相关的,我通常使用craco。切换回React脚本暂时没有帮助。
我使用的是react-scripts 4.0.3(最新版本)。
怎么回事?我怎么解决这个愚蠢的问题?

jaxagkaj

jaxagkaj1#

这是由项目中的循环依赖项引起的。
循环依赖导致Jest返回一个空模块。我相信第二次进入一个模块时,它将有未定义的内容。
在我的例子中,链是ProcessStore.ts -> stores.ts -> ProcessStore.ts,所以当stores.ts加载ProcessStore.ts时,进程存储已经被加载,所以一切都是未定义的。

3htmauhk

3htmauhk2#

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

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

在另一个文件中

import { myHook } from 'services/hooks'

有一个索引文件

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

我不认为我有一个循环依赖的任何地方,我从来没有能够真正理解什么是错的。

35g0bw71

35g0bw713#

由于循环依赖关系,我也遇到了这个问题。
为了确认bug的性质,我对丢失的导入执行了console.log并执行了我的测试。我可以看到导入实际上是undefined,而它不应该是。
我运行这个命令来查找包/项目级别的循环依赖关系:

npx madge --circular --extensions ts,tsx .

然而,这只是给了我一个关于发生了什么的线索。
然后,我在循环依赖发生的地方使用了debugger。使用Chrome DevTools,我检查了调用栈,并发现了每个导入是如何被导入的。这非常清楚地揭示了循环依赖。对我来说,这是解开循环依赖最重要的部分。

相关问题