如何解决Jest测试套件由于“ TypeError:无法读取未定义的属性'xxx'”而无法运行
我正在尝试重组TypeScript React项目的import / export语句,使它们更短,更整洁,这主要是通过在每个特定于功能的文件夹中定义一个index.ts
文件来导出资源(接口/类型)的方法。 /功能等)。 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
索引> CarPark
索引> Zoo
索引。
[详细信息]这种情况是从ZooManager
文件夹的索引文件中导出Zoo
,并且ZooManager
导入从{的索引文件中导出的CarParkManager
{1}}文件夹。 “ FooBarEnum”是从CarPark
文件夹的索引文件中导出的,并由Zoo
使用,它构成了依赖周期。
我知道给定的欺骗性示例并不太好读,但这提供了一个提示,当您遇到类似的问题时,请注意循环依赖。
可以添加import/no-cycle ESLint规则以执行静态检查。
并且madge开发人员工具可用于构造可视模块依赖图。
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。