如何使用sinon模拟回调请求?

时间:2019-08-07 15:11:41

标签: node.js unit-testing mocha sinon

这是我简单的应用程序temp.js,它运行良好:

var request = require('request');
var myRequest = request.defaults({
        agent: false,
        timeout: 5000,
        jar: false,
        followRedirect: false,
        method: 'GET'
    });

var MY_CLASS = {
    getData: function (req, res, next) {
        return myRequest({
            uri: 'https://jsonplaceholder.typicode.com/todos/1',
        }, function (error, data) {
            if (error) {
                return next(error, null);
            }

            return next(null, data);
        });
    }
};

module.exports = MY_CLASS;

我从temp2.​​js中调用它:

const MY_CLASS = require('./temp.js');

MY_CLASS.getData('test', 'test', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data.statusCode);
    }
});

现在尝试在单元测试中使用sinon,但是如何真正对它进行存根/模拟呢?不知道是否应该存根请求或导出myRequest ...我需要从https://jsonplaceholder.typicode.com/todos/1获得虚假响应。在这里,我在存根getData而不是请求自身。它可以工作,但是我如何存根请求?

const sinon = require("sinon");
const MY_CLASS = require('../temp.js');

describe('test', function(done) {
   before(()=>{
        sinon
        .stub(MY_CLASS, 'getData')
        .yields(null, {statusCode: 200});
   });
    after(()=>{
        MY_CLASS.getData.restore();
    });

    it.only('test', function(done) {
        function cb(err, data) { 
            data.statusCode.should.equal(200);
            done();
        }
        MY_CLASS.getData('test', 'test', cb);           
    });
});

1 个答案:

答案 0 :(得分:0)

已解决。而不是使用

var myRequest = request.defaults({
        agent: false,
        timeout: 5000,
        jar: false,
        followRedirect: false,
        method: 'GET'
    });

我在MY_CLASS中这样做: 代替

return myRequest({

我愿意

return request.get({}

现在您可以正确地存根了