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

问题描述 投票:0回答:2

我已经使用请求模块实现了节点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()的响应。任何指针都是这样的。

node.js sinon
2个回答
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();
        });
    });
});

0
投票

除了sinon之外没有任何东西的一种方法就是将存在于内部的Request,它可以方便地提供它的原型,就像这样

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

options中的callsFakerequest函数处理并传递到Request.prototype.init

现在你的回调参数是你的var sendRequest = function(req, callback) {...}函数中预期的参数

© www.soinside.com 2019 - 2024. All rights reserved.