如何使用sinon模拟req和res参数的函数?

我想通过一些testing,使用嘲讽和存根。 controler.js:

const User = require('./models/user'); module.exports.userRead = function userRead(req, res) { User .query() .then(users => { res.render('results', {data: users}); }) .catch((err) => { res.render('error'); }); 

user.test.js:

 const sinon = require('sinon'); const controller = require('../controler'); const Provider = require('../provider'); describe('Testing userRead', () => { const appStub = sinon.stub(Provider,'query'); test('should returns users', () => { controler.userRead(req, res); appStub.restore(); appStub.verify(); }); }); 

testing不能通过,我得到这个错误:

 ReferenceError: req is not defined 

我该如何解决这个问题?

在你的代码中,没有什么叫做req

在你的特定实例中,只需传入{} (空对象),因为你的控制器还没有对req做任何事情

 const sinon = require('sinon'); const controller = require('../controler'); const Provider = require('../provider'); describe('Testing userRead', () => { const appStub = sinon.stub(Provider,'query'); test('should returns users', () => { controler.userRead({}, res); appStub.restore(); appStub.verify(); }); }); 

另一个(更好的)select是使用https://github.com/howardabrams/node-mocks-http

 const sinon = require('sinon'); const httpMocks = require('node-mocks-http'); const controller = require('../controler'); const Provider = require('../provider'); describe('Testing userRead', () => { const appStub = sinon.stub(Provider,'query'); const req = httpMocks.createRequest(); //can setup req here test('should returns users', () => { controler.userRead(req, res); appStub.restore(); appStub.verify(); }); });