【问题标题】:how can i mock a dynamically loaded, virtual module in jest?我如何开玩笑地模拟动态加载的虚拟模块?
【发布时间】:2016-11-18 16:59:45
【问题描述】:

我在 Jest 单元测试中有一个虚拟 javascript 文件,路径为“/widgets/1.0.js”。我已经模拟了 fs 模块来模拟它的存在。

现在我想动态加载它以调用方法 'foo()'。我认为这将是使用虚拟模拟的情况:

index.test.js
    jest.mock('/widgets/1.0.js', () => {foo: jest.fn(() => {console.log('foo!')})}, {virtual: true});

调用mock的代码:

index.js
    let module = require('/widgets/1.0.js');
    module.foo();

当我运行测试时:

Cannot find module '/widgets/1.0.js' from 'index.js'

      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:151:17)
      at processWidgets (src/index.js:115:2418)
      at Object.<anonymous> (src/__tests__/index.test.js:99:73)

我认为应该可以。有什么想法吗?

谢谢!

【问题讨论】:

    标签: javascript unit-testing mocking virtual jestjs


    【解决方案1】:

    模块路径似乎有问题。这有效:

    index.test.js
    jest.mock('1.0', () => {
      return {
        foo: () => {return 42;}
      }
    }, {virtual: true});
    
    index.js
    const module = require('1.0');
       let retval = module.foo();
       console.log('retval: ', retval);
    

    如果我使用“/widgets/1.0”,它不会。希望对你有帮助。。

    【讨论】:

    • 请记住,在您的第一个实现中,模拟函数没有返回任何内容,这可能是错误
    猜你喜欢
    • 2018-07-25
    • 2020-03-05
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2018-03-02
    • 2019-11-09
    相关资源
    最近更新 更多