Javascript 为什么jest在执行节点模块代码时出现问题?

Javascript 为什么jest在执行节点模块代码时出现问题?,javascript,node.js,node-modules,jestjs,Javascript,Node.js,Node Modules,Jestjs,我有两个模块 其中一个“A”是ES5,没有巴别塔。它的单元测试使用mocha和chai,并成功完成。在测试期间,单元测试需要一个模块“M”。此时,将运行模块中的代码。如果不是,则测试失败。如果我调试执行,“require('M')”会直接跳到module.js require(路径)中,并在模块的顶部范围加载/执行代码 另一个是ES6。它使用JEST19.0.2和BabelJEST19.0.0,这两个版本都是当前的最新版本。它需要相同的模块,但不幸的是,代码没有运行,测试失败。我已将“autom

我有两个模块

其中一个“A”是ES5,没有巴别塔。它的单元测试使用mocha和chai,并成功完成。在测试期间,单元测试需要一个模块“M”。此时,将运行模块中的代码。如果不是,则测试失败。如果我调试执行,“require('M')”会直接跳到module.js require(路径)中,并在模块的顶部范围加载/执行代码

另一个是ES6。它使用JEST19.0.2和BabelJEST19.0.0,这两个版本都是当前的最新版本。它需要相同的模块,但不幸的是,代码没有运行,测试失败。我已将“automock”显式设置为false。调试时,“require('M')”堆栈是:

jest-runtime/build/index.js:requireModuleOrMock(from, moduleName)
jest-runtime/build/index.js:requireModule(from, moduleName, options)
jest-runtime/build/index.js:_execModule(localModule, options)
此时,它返回而不运行模块的代码。该区块为:

// If the environment was disposed, prevent this module from being executed.
if (!this._environment.global) {
  return;
}
很明显,环境被破坏了。然后requireModule()返回moduleRegistry[modulePath]。导出。结果,顶层模块作用域代码无法运行,测试失败

我应该补充一点,失败的代码是在一个承诺内运行的,因此环境似乎可能在承诺解决之前被释放。我试过使用:

let promise = ...
expect(promise).resolves.toBe(true);
但执行路径不变

如果有人知道发生这种情况的原因以及如何确保模块代码运行,我们将不胜感激。

expect(promise)。resolves
在v19.0.2中不可用,它将正式添加到v20中。此时您可以使用
jest@next
或来自测试。如果这没有帮助,那最好能看到一个简短的重新编程,或者至少是测试和模块代码。谢谢。我是通过你提到的“回报承诺”链接来的。这将是一个很好的功能。