摩卡测试突然停止:找不到模块“pg-native”

Chr*_*erJ 2 mocha.js node.js sequelize.js

我们的 mocha 测试突然停止,控制台上显示以下消息:

Cannot find module `pg-native`
Run Code Online (Sandbox Code Playgroud)

没有显示堆栈跟踪,mocha 不呈现测试的正常输出。测试立即停止。

如果我禁用有问题的测试,所有测试都会正常运行。

安装 pg-native 消除了错误,但是 mocha 只是挂在那个点上。

Chr*_*erJ 6

根据这个问题,问题是运行一些深度遍历 sequelize 记录的结果。

例如

expect(myObject).to.deep.equal(mySequelizeInstance);
Run Code Online (Sandbox Code Playgroud)

更改为

expect(myObject).to.deep.equal(mySequelizeInstance.toJSON());
Run Code Online (Sandbox Code Playgroud)

会解决它

为什么?

上述行为有两个原因

  1. Sequelize 记录覆盖本机 getter,因此遍历某些属性会导致代码被执行。在这种情况下,这些属性之一最终会导致require('pg-native')执行(以及错误)
  2. 该对象包含循环引用,因此代码在遍历无限引用时挂起。离开足够长的时间,它最终会在耗尽堆栈时失败。