如何模拟 node-rest-client 请求?

How can I Mock node-rest-client request?

我正在为我的项目使用 node-rest-client,我已经到了要开始单元测试我的 类 的地步,它在我的单元测试中使用了 node-rest-client. Is there any examples on how I can mock the Client in my tests? I am using Sinon

第 1 步:在您正在测试的 js 代码中,导出 node-rest-client 实例,以便您的测试代码可以使用它。例如在myApp.js,我把这个:

var Client = require('node-rest-client').Client;
var restClient = new Client();
exports.restClient = restClient; //instance now available outside this module

restClient.get(someUrl, ...); //actual node rest client call

第 2 步:在您的测试代码中,创建一个 return 伪函数的包装函数,并使用 sinon 将其模拟到您的目标代码中。这允许您在测试设置期间注入 return 数据和响应代码。

var nodeRestGet = function (data, statusCode) {
  return function (url, cb) {
    cb(data, { statusCode: statusCode || 200 });
  }
};

sinon.stub(myApp.restClient, 'get').callsFake(nodeRestGet("", 200));

第 3 步:编写测试代码。请注意,如果您 运行 多个测试,您可能想要恢复该方法(删除模拟):

myApp.doThings(); // TEST

myApp.restClient.get.restore(); // removes the mock