V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Trim21
V2EX  ›  Node.js

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

  •  
  •   Trim21 · 2018-08-21 04:25:15 +08:00 via Android · 4125 次点击
    这是一个创建于 2289 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以这里提到的 is-it-friday 为例 https://github.com/kus/patch-module/blob/master/README.md#usage
    模块内容只有一行
    module.exports = "Probably not...";

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

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

    var isItFriday = require('./patch/is-it-friday.js');
    ysc3839
        3
    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
        4
    ericls  
       2018-08-21 06:56:53 +08:00 via iPhone
    @Trim21 你在上一步就已经 monkey patch 成功了呀
    KuroNekoFan
        5
    KuroNekoFan  
       2018-08-21 07:41:16 +08:00 via iPhone   ❤️ 1
    inject-loader 了解一下
    Mutoo
        6
    Mutoo  
       2018-08-21 08:09:22 +08:00
    $ npm link
    专门用来做这事
    ahonn
        7
    ahonn  
       2018-08-21 09:00:45 +08:00 via iPhone   ❤️ 1
    jest mock module 了解一下
    maichael
        8
    maichael  
       2018-08-21 09:02:22 +08:00
    你这个 mock 是在什么环境下 mock。test?
    Trim21
        9
    Trim21  
    OP
       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 对的 测试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5624 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.