node.js - 开 Jest ,没有拾取超出范围的模拟变量

标签 node.js variables mocking jestjs integration-testing

我有一个在我的整个应用程序中使用的日志记录类,我正在尝试使用 Jest 模拟来模拟它。

这是我的代码:

const mockLogger = {
  'error': jest.fn()
};
jest.mock('../../config/log', () => mockLogger);

我需要能够检查 log.error 是否已被调用,因此我需要声明 log 的模拟实现超出范围。但是我不断收到以下错误:

 ReferenceError: mockLogger is not defined

      20 |   'error': jest.fn()
      21 | };
    > 22 | jest.mock('../../config/log', () => mockLogger);

有趣的是,我有一段非常相似的代码可以在另一个项目中使用。我不明白为什么会收到此错误。

我知道这是范围界定的问题,但不知道该怎么办。对此的任何意见都会非常有帮助!

最佳答案

问题在于,jest.mock 调用在运行时被提升到测试文件的外部范围。所以你无法在测试内部使用任何变量。在你的情况下最简单的是:

jest.mock('../../config/log', () => ({
  'error': jest.fn()
}));

关于node.js - 开 Jest ,没有拾取超出范围的模拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54859333/

相关文章:

javascript - 为什么我无法引用 'this' 上的内容,但使用 var 时却可以?

node.js - 如何从 NodeJS/Tedious 连接到 SQL Azure?

mysql - 如何将form_dropdown id值添加到数据库? - 代码点火器

ruby-on-rails - 模拟方法的代码是否实际运行

java - 通过调用数据库来 stub /模拟方法的问题

php - 创建 PHPUnit 模拟模型使用默认数据库而不是 CakePHP 中的测试

node.js - MongoDB Nodejs 驱动程序 - 关于引号的规则/指南是什么?

javascript - for 循环中的嵌套 Promise 的行为不符合预期

在 Prolog 中作为变量/参数列出

c - 尝试打印方程的答案并在 C 中得到零。