想要 mock node_modules 文件夹里的某个模块,有没有什么好办法?

2018-08-21 04:25:15 +08:00
 Trim21
以这里提到的 is-it-friday 为例 https://github.com/kus/patch-module/blob/master/README.md#usage
模块内容只有一行
module.exports = "Probably not...";

现在我有看一个文件引用了这个模块,现在想要对这个文件进行测试,需要 mock 这个 is-it-friday

这个过程中不想修改原来的代码, 谷歌了一下也没有类似的资料…不知道有没有什么好办法?
4028 次点击
所在节点    Node.js
9 条回复
ysc3839
2018-08-21 05:51:38 +08:00
所以你提到的 patch-module 不能实现吗?
Trim21
2018-08-21 05:53:33 +08:00
@ysc3839 不能…会变成这样

var isItFriday = require('./patch/is-it-friday.js');
ysc3839
2018-08-21 05:58:04 +08:00
是我理解错了,patch-module 是通过修改文件来实现的,但你不想修改文件。
https://itnext.io/how-to-mock-dependency-in-a-node-js-and-why-2ad4386f6587
找到了这个,不知道是不是你需要的。
ericls
2018-08-21 06:56:53 +08:00
@Trim21 你在上一步就已经 monkey patch 成功了呀
KuroNekoFan
2018-08-21 07:41:16 +08:00
inject-loader 了解一下
Mutoo
2018-08-21 08:09:22 +08:00
$ npm link
专门用来做这事
ahonn
2018-08-21 09:00:45 +08:00
jest mock module 了解一下
maichael
2018-08-21 09:02:22 +08:00
你这个 mock 是在什么环境下 mock。test?
Trim21
2018-08-21 14:36:09 +08:00
@ericls #4 不行, 会改动原文件 原文件里的 require('is-it-friday') 需要修改成 require('./patch/is-it-friday.js')

@Mutoo #6 看了一眼 link 命令, 理解不了为什么他能做这个...就算我把一个包 link 到全局之后, require 还是会先搜索 node_modules 文件夹下的模块吧?

@maichael 对的 测试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX