Nodejs:想要 mock node_modules 文件夹里的某个模块,有没有什么好办法?
Nodejs:想要 mock node_modules 文件夹里的某个模块,有没有什么好办法?
以这里提到的 is-it-friday 为例 https://github.com/kus/patch-module/blob/master/README.md#usage
模块内容只有一行
module.exports = “Probably not…”;
现在我有看一个文件引用了这个模块,现在想要对这个文件进行测试,需要 mock 这个 is-it-friday
这个过程中不想修改原来的代码, 谷歌了一下也没有类似的资料…不知道有没有什么好办法?
所以你提到的 patch-module 不能实现吗?
不能…会变成这样
var isItFriday = require(’./patch/is-it-friday.js’);
是我理解错了,patch-module 是通过修改文件来实现的,但你不想修改文件。
https://itnext.io/how-to-mock-dependency-in-a-node-js-and-why-2ad4386f6587
找到了这个,不知道是不是你需要的。
你在上一步就已经 monkey patch 成功了呀
inject-loader 了解一下
$ npm link
专门用来做这事
jest mock module 了解一下
你这个 mock 是在什么环境下 mock。test?
#4 不行, 会改动原文件 原文件里的 require(‘is-it-friday’) 需要修改成 require(’./patch/is-it-friday.js’)
#6 看了一眼 link 命令, 理解不了为什么他能做这个…就算我把一个包 link 到全局之后, require 还是会先搜索 node_modules 文件夹下的模块吧?
对的 测试
在 Node.js 中 mock node_modules
文件夹里的某个模块,可以通过多种方式实现。下面介绍一种常用的方法,使用 jest
测试框架和 jest.mock()
方法进行模块 mock。
首先,确保你已经安装了 jest
。如果还没有安装,可以通过 npm 或 yarn 进行安装:
npm install --save-dev jest
# or
yarn add --dev jest
假设你要 mock 一个名为 some-module
的模块,你可以在测试文件中这样写:
// __tests__/yourTestFile.test.js
// 使用 jest.mock() 来 mock some-module
jest.mock('some-module', () => {
return {
someFunction: jest.fn(() => 'mocked response'),
// 可以 mock 更多函数或属性
};
});
const someModule = require('some-module');
test('should mock some-module', () => {
const result = someModule.someFunction();
expect(result).toBe('mocked response');
expect(someModule.someFunction).toHaveBeenCalled();
});
在上述代码中,jest.mock('some-module')
会告诉 jest
使用你提供的 mock 实现来替代实际的 some-module
。你可以在这个 mock 对象中定义任何你需要的函数或属性,并在测试中验证它们的行为。
这种方法非常适合在单元测试中 mock 依赖模块,从而专注于测试你的代码逻辑,而无需依赖实际的模块实现。