electron - 导入sequelize时的循环依赖

标签 electron sequelize.js jestjs umzug

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

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

 Class extends value undefined is not a constructor or null

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

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

有没有更好的方法来重组我的导入或实际的解决方法来开 Jest ?我不明白为什么它在通过 electron-webpack 编译时不会引起任何问题,但会开 Jest 。我还观察是否要在模块 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,它允许我的测试通过

最佳答案

一、Madge帮助找到循环依赖。

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

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

关于electron - 导入sequelize时的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768625/

相关文章:

mysql - Sequelize 具有相同外键的多对多表覆盖值

node.js - 模拟 jwt 签名的私钥

node.js - 带有 Webpack 的 Electron 原生 NodeJS 模块

testing - 带有 Electron 的 TestCafe : Determine if app is visible on Windows desktop

Electron 中的 WebRTC 屏幕共享

javascript - 如何导出分配给变量的要求?

node.js - 连接到 SQL Server 时通过 Sequelize 连接的问题

node.js - 为 postgresQL 续写 bulkCreate updateOnDuplicate?

reactjs - 测试滚动到 View Jest

node.js - Jest : how to restore to a previous mocked implementation (not the original)