导入sequelize时的循环依赖项

时间:2019-04-19 22:46:19

标签: electron sequelize.js jestjs umzug

我有一个电子项目,其中有一组从抽象类扩展的类。抽象类具有一个序列化实例和一个模型的导入(下面的再现代码中未显示)。

编译后,我的电子应用程序运行正常。但是在测试中,笑话不断返回错误

 Class extends value undefined is not a constructor or null

据我了解,这是由循环依赖性引起的。我一直在评论代码,但是我无法理解如何通过测试来预防/解决此问题。

复制代码可在此处找到:https://github.com/jjoey87/jest-circular-dependencies

是否有更好的方法来重组我的导入或实际的解决方法,使这项工作变得开玩笑?我不明白为什么通过electronic-webpack编译时它不会引起任何问题,但会开玩笑。我还观察了是否要在模块B下注释导入的组件,这使我的测试可以运行/通过。

import ModuleC from '@common/ModuleC'
// import ComponentC from '@common/providers/ComponentC'
// import ComponentD from '@common/providers/ComponentD'
// import ComponentE from '@common/providers/ComponentE'
// import ComponentF from '@common/providers/ComponentF'
// import ComponentA from '@common/providers/ComponentA'
// import ComponentB from '@common/providers/ComponentB'

const providers = [
  // ComponentC,
  // ComponentD,
  // ComponentE,
  // ComponentF,
  // ComponentA,
  // ComponentB
]

类似地,如果我评论从Abstract类中导入sequelize,则它允许我的测试通过

1 个答案:

答案 0 :(得分:0)

首先,Madge帮助找到循环依赖项。

npm i --saveDev madge
node_modules/madge/bin/cli.js --warning --circular --extensions js ./

它有助于识别仅在测试期间成为问题的循环(每个系统对循环的处理方式有所不同)。从结构上讲,关键在于模型和序列化实例不依赖于任何已注释掉的组件。依赖关系可以在建造后以工厂或其他更复杂的方式注入,或者通过诸如发射器之类的松耦合通信来联系。