使用sinon stub作为请求构造函数

时间:2016-04-22 06:44:16

标签: node.js sinon

我已经使用请求模块实现了节点js代码来调用HTTP API。 对于get,post,put,delete,我直接调用了require模块的request(),

var sendRequest = function(req, callback) {
    request(req, function(err, res) {
        if (err) {
            callback(err, null, res);
        } else {
            callback(null, res);
        }
    }
}

我想调用sendRequest()但是模拟request()的响应。 任何指针。

2 个答案:

答案 0 :(得分:0)

许多选项之一是使用proxyquire来存根请求模块:

var proxyquire = require('proxyquire')
  , assert = require('assert')
  , requestStub = function (req, callback) { callback(req); };

// assuming you export the sendRequest from that file
var sendRequest = proxyquire('./sendRequest', { 'request': pathStub });

describe('sendRequest', function() {
    it('request', function (done) {
        var someReq = {a: 'b'};
        sendRequest(someReq, function (req) {
            assert.equal(someReq, req);
            done();
        });
    });
});

答案 1 :(得分:0)

让它除了sinon之外不存在任何其他内容的一种方法是对Request的内部类进行存根,该类很方便地提供其原型,例如

stub = sinon.stub(request.Request.prototype, "init");
stub.callsFake( options => options.callback(null, {statusCode: 200}, "faked response"));

options中的callsFake中的requestRequest.prototype.init函数处理并传递到var sendRequest = function(req, callback) {...}中。

现在您的回调参数是您的startForegroundService()函数中期望的参数