在 Jest 测试环境中使用 Jest

7

我创建了一个Jest测试环境,其中我模拟了一个特定的模块:

const NodeEnvironment = require('jest-environment-node');
const { lumigo } = require('../../src/services/lumigo');

class TestEnvironment extends NodeEnvironment {
  async setup() {
    await super.setup();
    jest.mock('../../src/services/lumigo');
    lumigo.trace = jest.fn((func) => func);
  }

  async teardown() {
    await super.teardown();
  }

  getVmContext() {
    return super.getVmContext();
  }
}

module.exports = TestEnvironment;

我将我的测试配置为使用以下测试环境:

/**
 * @jest-environment ./tests/test-environment.js
 */

... rest of the test

然而,当我运行测试时,出现以下错误:
ReferenceError: jest is not defined

如果我在我的测试环境文件的顶部尝试添加以下内容:
const jest = require('jest');

我收到一个警告,Jest自动处于范围内。不要导入"jest",因为Jest没有导出任何内容,但测试仍然失败。
如何在我的测试环境中使用jest(例如调用jest.mock)?

你不需要导入jest。这里可能存在配置问题。 - tiborK
在 await super.setup() 后添加 const jest = this.jestRequireActual('jest');。如果这对你有用,请让我知道,我会解释一下。 - Jagroop
1个回答

1

我认为问题在于你试图从类内部调用模拟对象。 jest.mock('../../src/services/lumigo'); 你可能还需要在你的jest配置文件中提到这个文件。也许是在 setupFilesAfterEnv属性 中。

按照设计,像那个 jest.mock 表达式一样的语句会被提升并在导入之前调用,尽管通常它们在文件中出现在导入的下面。如果你想防止这种行为,你可以使用 jest.doMock

顺便说一句,在一个正确配置的 jest 环境中,你不需要导入 jest。我不确定它是如何工作的,但一旦你配置了jest,它就可以全局使用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接