Node.js 如何模拟嵌套请求?

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 (

我试图创建单元测试,并用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});
});
您可以使用等来实现该行为

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)
实现您需要的任何逻辑