首页 > 解决方案 > Jest Mock 从节点模块全局模拟

问题描述

我正在编写一系列 Node 模块,在编写单元测试之前需要设置一堆常见的 Jest 模拟。
我正在尝试将单元测试设置重构为一个单独的模块,这样我就可以避免每次都重写设置。
问题是,当我将以下代码作为模块导入时,它不再模拟其他库,而在实用程序文件中设置模拟时它工作得很好。

工作代码:

jest.mock('@actions/core')
jest.mock('@actions/github')
const { GitHub, context} = require('@actions/github')
const core = require('@actions/core')

GitHub.mockImplementation(() => {
return {
    {
        repos: {
            getContents: jest.fn()
        }
    }
}
}
module.exports = { core, GitHub, context }

我把它保存在utils.js我的测试文件旁边的一个文件中,然后像我期望的那样导入它const { core, GitHub, context } = require('./utils.js') ,一切都像我期望的那样模拟。我可以运行expect().toHaveBeenCalledTimes()并获得我期望的数字。

当我移动utils.js 到另一个模块并需要它时,就会出现问题。

我知道在笑话文档的底部它说“......导入模块的另一个文件将获得原始实现,即使它在模拟模块的测试文件之后运行。” 但我看到这项工作与外部文件不一致。

有人知道如何在外部模块中进行模拟设置吗?

标签: node.jsunit-testingjestjs

解决方案


推荐阅读