【问题标题】:How can I stub/mock a function in a module called by another module in a test?如何存根/模拟测试中另一个模块调用的模块中的函数?
【发布时间】:2017-10-16 14:33:56
【问题描述】:

我正在尝试测试模块 X 中的一个函数。这是一个相当复杂的函数。在这个函数中,我在模块 Y 中导入了一个调用第三方服务的函数。如果我对模块 X 的测试未导入模块 Y,我如何在模块 Y 中存根此第 3 方服务?

【问题讨论】:

    标签: node.js unit-testing testing


    【解决方案1】:

    你可以沿着require接缝修补像嘲弄这样的项目:

    如果您尝试过在 Node.js 中使用模拟,那么您毫无疑问 发现让你的模拟连接起来并不容易 面对 Node 的模块加载系统。当您的待测源 通过 require 引入它的依赖项,你想要你的 mocks 提供,而不是原始模块,以启用真正的单元测试 你的代码。

    https://github.com/mfncooper/mockery

    【讨论】:

      【解决方案2】:

      假设您的模块X返回Y执行的操作的结果,我们可以说X如下:

      const y = require ('y.js');
      
      xWork () {
          return y.doWork().result;
      }
      

      您可以在此处更新X 以注入Y,如下所示:

      xWork (y) {
          return y.doWork().result;
      }
      

      在您的测试中,您可以生成 Y 的模拟,可以像这样注入:

      yMock = {
          doWork: () => { 
              return { result: 'mockedResult' };
          }
      };
      
      x.xWork(yMock); // call x with y mock
      

      Javascript 允许你模拟任何东西,而不需要任何非常适合单元测试的依赖项。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        • 2021-04-19
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多