我已经使用请求模块实现了节点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()的响应。 任何指针。
答案 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
中的request
由Request.prototype.init
函数处理并传递到var sendRequest = function(req, callback) {...}
中。
现在您的回调参数是您的startForegroundService()
函数中期望的参数