我已经使用请求模块实现了节点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()的响应。任何指针都是这样的。
许多选项之一是使用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();
});
});
});
除了sinon之外没有任何东西的一种方法就是将存在于内部的Request,它可以方便地提供它的原型,就像这样
stub = sinon.stub(request.Request.prototype, "init");
stub.callsFake( options => options.callback(null, {statusCode: 200}, "faked response"));
options
中的callsFake
由request
函数处理并传递到Request.prototype.init
。
现在你的回调参数是你的var sendRequest = function(req, callback) {...}
函数中预期的参数