开玩笑不会拿出超出范围的模拟变量

时间:2019-02-25 04:01:46

标签: node.js variables mocking jestjs integration-testing

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

这是我的代码:

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);

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

我知道这是范围界定的问题,但不确定如何处理。任何有关此的输入确实会有所帮助!

1 个答案:

答案 0 :(得分:0)

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

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