我正在编写一系列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
移到另一个模块并需要它时,出现问题。
我知道在bottom of the jest documentation处它说:“ ...另一个导入模块的文件将获得原始实现,即使它在模拟该模块的测试文件之后运行。”但是我看到此工作与外部文件不一致。
有人知道如何在外部模块中进行模拟设置吗?