如何模拟嵌套请求?

时间:2019-08-08 13:58:33

标签: node.js unit-testing mocha 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 (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.comyyyy.com。换句话说,我想模拟每个人的不同反应

before(()=>{
    sinon
    .stub(request, 'get')
    .yields(null, {statusCode: 200, id: 10});
});

1 个答案:

答案 0 :(得分:0)

您可以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)来实现所需的任何逻辑。