【问题标题】:How to test nodejs modules that transitively require itself如何测试传递需要自身的nodejs模块
【发布时间】:2019-03-22 14:13:17
【问题描述】:

假设以下场景:

Rest客户端是一个模块,里面有很多中间件;它们本身就是模块。

现在,我们正在尝试创建一个新的中间件,该中间件需要客户端自己获取/更新客户端输入 url 的元数据。

测试这个中间件,会从 npm 注册表中引入一个已发布的客户端版本,因为中间件在客户端上有一个 devDependency。但我们想为本地客户服务。

此外,客户端的发布版本不包含这个新的中间件,因此它不允许使用这个中间件测试请求管道。

当我们测试中间件本身以发送获取数据的请求时,我们希望使用此中间件启动客户端。

中间件足够聪明,不会为元数据请求元数据,因此它会跳过第二次调用。新流程应该如下图所示:

【问题讨论】:

    标签: javascript node.js unit-testing testing mocha.js


    【解决方案1】:

    包装 nodejs 模块加载器,以在测试执行期间请求客户端时返回本地客户端而不是发布的客户端。

    describe(()=>{
      const localClient = require('../client');
      const m = require('module');
      const orig = m._load;
    
      before(()=>{
        m._load = function(name){
          if(name==='client'){
            return localClient;
          }
          return orig.appy(this, arguments)
        }
      });
    
      after(()=>{
        m._load = orig;
      });
    
      it('test goes here',()=>{...})
    })
    

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2020-02-25
      • 2019-01-15
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多