node.js - 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
到另一个模块并需要它时,就会出现问题。
我知道在笑话文档的底部它说“......导入模块的另一个文件将获得原始实现,即使它在模拟模块的测试文件之后运行。” 但我看到这项工作与外部文件不一致。
有人知道如何在外部模块中进行模拟设置吗?
解决方案
推荐阅读
- javascript - 错误:未实现:window.scrollTo。我们如何从 Jest 测试中删除这个错误?
- mysql - SEL * 与 SEL 列
- android - 在主项目中显示注释
- directions - 在 Kakao 地图上显示路线,以 url 编码的开始/目的地
- python - 相当于 tensorflow 2.0 beta1 中的 tf.assign?
- flutter - 问题在列中展开的列表视图上方呈现小部件
- python - Pip 要为一个包删除的文件列表在哪里
- php - 从php调用动态axsoap服务方法时出错
- python - 在 Python 中将图像保存为 OIB 文件
- javascript - Chrome 扩展在打开新标签后退出运行 javascript