为什么jest在执行节点模块代码时遇到问题?

时间:2017-03-25 16:04:14

标签: javascript node.js node-modules jestjs

我有两个模块。

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

另一个是ES6。它使用了jest 19.0.2和babel-jest 19.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] .exports。因此,顶级的模块范围代码不会运行,测试也会失败。

我应该补充说,失败的代码是在一个promise中运行的,所以在promise解析之前环境似乎是可能发布的。我尝试过使用:

let promise = ...
expect(promise).resolves.toBe(true);

但执行路径不变。

如果有人知道为什么会这样,以及如何确保模块代码运行,我们将不胜感激。

0 个答案:

没有答案