0

我有一个电子项目,其中有一组从抽象类扩展而来的类。抽象类有一个 sequelize 实例和一个模型的导入(下面的复制代码中没有说明)。

编译后,我的电子应用程序运行良好。但是在测试中, jest 不断返回错误

 Class extends value undefined is not a constructor or null

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

复制代码可以在这里找到:https ://github.com/jjoey87/jest-circular-dependencies

有没有更好的方法来重组我的导入或实际的解决方法来开玩笑?我不明白为什么它在通过 electron-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,它允许我的测试通过

4

1 回答 1

0

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

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

它有助于识别仅在测试期间成为问题的循环(每个系统处理它们的方式略有不同)。在结构上,关键是模型和续集实例不依赖于任何注释掉的组件。依赖关系可以在使用工厂或其他更复杂的模式构建后注入,或者通过像发射器这样的松散耦合通信进行联系。

于 2019-08-22T20:40:38.353 回答