如何模拟嵌套请求?
How to mock nested requests?
我正在尝试创建单元测试并使用 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 (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});
});
您可以 onFirstCall
, onSecondCall
, onCall(n)
等来实现该行为。
before(()=>{
sinon
.stub(request, 'get')
.onFirstCall().yields(null, {statusCode: 200, id: 10})
.onSecondCall().yields(null, {statusCode: 200, id: 11}};
});
最终您可以使用 callsFake(fn)
来实现您需要的任何逻辑。
我正在尝试创建单元测试并使用 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 (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});
});
您可以 onFirstCall
, onSecondCall
, onCall(n)
等来实现该行为。
before(()=>{
sinon
.stub(request, 'get')
.onFirstCall().yields(null, {statusCode: 200, id: 10})
.onSecondCall().yields(null, {statusCode: 200, id: 11}};
});
最终您可以使用 callsFake(fn)
来实现您需要的任何逻辑。