如何使用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(); }); });