javascript - 如何测试传递需要自身的nodejs模块

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

假设以下场景:

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

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

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

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

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

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

New request flow should be like this

最佳答案

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

关于javascript - 如何测试传递需要自身的nodejs模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293657/

相关文章:

javascript - 如何在函数调用中传递参数?

java - Java 中的 Liquibase 回滚似乎不起作用

c# - 我可以创建一个 SqlDataReader 并为其提供值,而不必从另一个对象返回 SqlDataReader 吗? SqlCommand.ExecuteReader()

javascript - EventSource Polyfill

javascript - Google Maps API 保存航点

node.js - 错误: FAILED_PRECONDITION: no matching index found.推荐索引为:

node.js - Nodejs 测试中 Mongodb 连接未关闭

c# - 使用 Mock 进行单元测试。父级没有默认构造函数

javascript - 根据地理位置获取最近距离

javascript - 在 Node.js 中高级编写文件