如何测试可过渡需要其自身的nodejs模块

时间:2019-03-22 05:54:08

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

假定以下情况:

Rest客户端是一个模块,其中包含许多中间件。本身就是模块。

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

测试此中间件,将从npm注册表中引入客户端的发布版本,因为中间件对客户端具有devDependency。但是我们想为我们的本地客户服务。

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

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

中间件足够聪明,不会为元数据请求元数据,因此它将跳过第二个调用。新流程应类似于下图:

New request flow should be like this

1 个答案:

答案 0 :(得分:0)

包装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',()=>{...})
})