gpt4 book ai didi

typescript - 由于未定义的 "TypeError: Cannot read property ' xxx',Jest 测试套件无法运行”

转载 作者:行者123 更新时间:2023-12-05 02:50:49 25 4
gpt4 key购买 nike

我正在尝试重新组织我的 TypeScript React 项目的导入/导出语句,使它们更短更清晰,主要是通过在每个要导出的功能特定文件夹中定义一个 index.ts 文件的方法该功能的资源(接口(interface)/类型/功能等)。这Smarter way to organize "imports" blog解释了几乎相同的想法。

但是在更改后, Jest 执行突然中断,堆栈跟踪如下。出于保密目的,所涉及的实体已被欺骗。

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)

基本上有一个常量文件中定义的枚举,根本无法读取。

我很确定我的 Jest 设置是正确的,因为它在此之前已成功执行。我使用 babel-jest@babel/preset-typescript 来编译。

如果有人能为我指出调试路径,我将不胜感激,因为堆栈跟踪并不能说明什么。

最佳答案

最后我意识到这是由我的代码库中隐藏的循环依赖引起的。

[TL;DR] 依赖循环:Rabbit > Zoo 索引 > CarPark 索引 > Zoo 索引。

[详情] 情况是ZooManager是从Zoo文件夹的index文件中导出的,ZooManager导入的是CarParkManagerCarPark 文件夹的索引文件导出。 'FooBarEnum'从Zoo文件夹的索引文件中导出,供CarParkManager使用,构成依赖循环。

我知道给定的欺骗示例不太好读,但这提供了一个提示,即当您遇到类似问题时,请注意循环依赖。

import/no-cycle可以添加 ESLint 规则进行静态检查。

还有 madge开发人员工具可用于构建可视化模块依赖关系图。

引用资料:

关于typescript - 由于未定义的 "TypeError: Cannot read property ' xxx',Jest 测试套件无法运行”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63480573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com