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(最新版本)。
怎么回事?我怎么解决这个愚蠢的问题?
3条答案
按热度按时间jaxagkaj1#
这是由项目中的循环依赖项引起的。
循环依赖导致Jest返回一个空模块。我相信第二次进入一个模块时,它将有未定义的内容。
在我的例子中,链是
ProcessStore.ts -> stores.ts -> ProcessStore.ts
,所以当stores.ts
加载ProcessStore.ts
时,进程存储已经被加载,所以一切都是未定义的。3htmauhk2#
我在导入这样一个文件时遇到了这个问题
在另一个文件中
有一个索引文件
我不认为我有一个循环依赖的任何地方,我从来没有能够真正理解什么是错的。
35g0bw713#
由于循环依赖关系,我也遇到了这个问题。
为了确认bug的性质,我对丢失的导入执行了
console.log
并执行了我的测试。我可以看到导入实际上是undefined
,而它不应该是。我运行这个命令来查找包/项目级别的循环依赖关系:
然而,这只是给了我一个关于发生了什么的线索。
然后,我在循环依赖发生的地方使用了
debugger
。使用Chrome DevTools,我检查了调用栈,并发现了每个导入是如何被导入的。这非常清楚地揭示了循环依赖。对我来说,这是解开循环依赖最重要的部分。