Jest test suite failed to run because of "TypeError: Cannot read property 'xxx' of undefined"
Jest test suite failed to run because of "TypeError: Cannot read property 'xxx' of undefined"
我正在尝试重新组织我的 TypeScript React 项目的 import/export 语句,使它们更短更清晰,基本上是通过在每个功能特定文件夹中定义一个 index.ts
文件来导出资源的方法(interface/type/function 等)该功能。这Smarter way to organize "imports" blog解释了几乎相同的想法。
但是在更改后,笑话执行突然中断,堆栈跟踪如下。出于保密目的,涉及的实体已被欺骗。
Test suite failed to run
TypeError: Cannot read property 'FooBarEnum' of undefined
at Object.FooBarEnum (src/features/Zoo/index.ts:93:23)
at Object.<anonymous> (src/features/CarPark/CarParkManager.ts:18:4)
at Object.<anonymous> (src/features/CarPark/index.ts:1:1)
at Object.<anonymous> (src/features/Zoo/ZooManager.ts:1:1)
at Object.<anonymous> (src/features/Zoo/index.ts:14:1)
at Object.<anonymous> (src/features/Rabbit/Rabbit.ts:4:1)
at Object.<anonymous> (test/features/Rabbit/Rabbit.test.ts:2:1)
基本上是在常量文件中定义了一个枚举,根本无法读取。
我很确定我的玩笑设置是正确的,因为它在此之前已成功执行。我使用babel-jest
和@babel/preset-typescript
来编译。
如果有人能指出调试路径,我将不胜感激,因为堆栈跟踪并不能说明什么。
最后我意识到这是由我的代码库中隐藏的循环依赖引起的。
[TL;DR] 依赖循环:Rabbit
> Zoo
index > CarPark
index > Zoo
index.
[详情]情况是ZooManager
是从Zoo
文件夹的索引文件中导出的,ZooManager
是从索引文件中导出的CarParkManager
导入的CarPark
个文件夹。 'FooBarEnum'从Zoo
文件夹的索引文件导出,供CarParkManager
使用,构成依赖循环
我知道给定的欺骗示例不太好读,但这提供了一个提示,当您遇到类似问题时,请注意循环依赖。
可以添加import/no-cycleESLint规则来进行静态检查。
并且madge开发者工具可以用来构建一个可视化的模块依赖图。
参考文献:
我正在尝试重新组织我的 TypeScript React 项目的 import/export 语句,使它们更短更清晰,基本上是通过在每个功能特定文件夹中定义一个 index.ts
文件来导出资源的方法(interface/type/function 等)该功能。这Smarter way to organize "imports" blog解释了几乎相同的想法。
但是在更改后,笑话执行突然中断,堆栈跟踪如下。出于保密目的,涉及的实体已被欺骗。
Test suite failed to run
TypeError: Cannot read property 'FooBarEnum' of undefined
at Object.FooBarEnum (src/features/Zoo/index.ts:93:23)
at Object.<anonymous> (src/features/CarPark/CarParkManager.ts:18:4)
at Object.<anonymous> (src/features/CarPark/index.ts:1:1)
at Object.<anonymous> (src/features/Zoo/ZooManager.ts:1:1)
at Object.<anonymous> (src/features/Zoo/index.ts:14:1)
at Object.<anonymous> (src/features/Rabbit/Rabbit.ts:4:1)
at Object.<anonymous> (test/features/Rabbit/Rabbit.test.ts:2:1)
基本上是在常量文件中定义了一个枚举,根本无法读取。
我很确定我的玩笑设置是正确的,因为它在此之前已成功执行。我使用babel-jest
和@babel/preset-typescript
来编译。
如果有人能指出调试路径,我将不胜感激,因为堆栈跟踪并不能说明什么。
最后我意识到这是由我的代码库中隐藏的循环依赖引起的。
[TL;DR] 依赖循环:Rabbit
> Zoo
index > CarPark
index > Zoo
index.
[详情]情况是ZooManager
是从Zoo
文件夹的索引文件中导出的,ZooManager
是从索引文件中导出的CarParkManager
导入的CarPark
个文件夹。 'FooBarEnum'从Zoo
文件夹的索引文件导出,供CarParkManager
使用,构成依赖循环
我知道给定的欺骗示例不太好读,但这提供了一个提示,当您遇到类似问题时,请注意循环依赖。
可以添加import/no-cycleESLint规则来进行静态检查。
并且madge开发者工具可以用来构建一个可视化的模块依赖图。
参考文献: