Node.js 如何模拟嵌套请求?
我试图创建单元测试,并用sinon模拟它。以下是我的简单应用程序:Node.js 如何模拟嵌套请求?,node.js,unit-testing,mocha.js,sinon,Node.js,Unit Testing,Mocha.js,Sinon,我试图创建单元测试,并用sinon模拟它。以下是我的简单应用程序: var request = require('request'); var MY_CLASS = { getData: function (req, res, next) { return request.get({ uri: 'https://xxxx.xxxx.com', }, function (error, data) { if (
var request = require('request');
var MY_CLASS = {
getData: function (req, res, next) {
return request.get({
uri: 'https://xxxx.xxxx.com',
}, function (error, data) {
if (error) {
return next(error, null);
}
request.get({
uri: `https://yyyy.yyyy.com/${data.id}`,
}, function (error, data) {
if (error) {
return next(error, null);
}
return next(null, data);
});
});
}
};
module.exports = MY_CLASS;
现在,如何正确模拟测试套件中getData
函数的每个请求?似乎这一个将同时模拟xxxx.com和yyyy.com。换句话说,我想模拟每个人的不同反应
before(()=>{
sinon
.stub(request, 'get')
.yields(null, {statusCode: 200, id: 10});
});
您可以使用等来实现该行为
before(()=>{
sinon
.stub(request, 'get')
.onFirstCall().yields(null, {statusCode: 200, id: 10})
.onSecondCall().yields(null, {statusCode: 200, id: 11}};
});
最终,您可以使用callsFake(fn)
来实现您需要的任何逻辑。您可以使用etc来实现该行为
before(()=>{
sinon
.stub(request, 'get')
.onFirstCall().yields(null, {statusCode: 200, id: 10})
.onSecondCall().yields(null, {statusCode: 200, id: 11}};
});
最终,您可以使用callsFake(fn)
实现您需要的任何逻辑