微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jest测试套件由于“ TypeError:无法读取未定义的属性'xxx'”而无法运行

如何解决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 举报,一经查实,本站将立刻删除。