用Jasmine和Express嘲笑请求对象

我有一个非常简单的方法:

module.exports = { login: function (username, password, req, res) { authModule.check_login({login: username, pass: password}).then(function (user) { req.session.regenerate(function () { req.session.user = username req.session.userID = user.id req.session.fullName = user.fullName req.session.email = user.email res.redirect('/user') }) }).catch(function (err) { res.render('login', { unsuccessful: true }) }) } } 

在我的unit testing中,我试图validation这个方法是否正确设置会话variables。 我一直试图通过使用jasmine.createSpy来嘲笑请求对象,但似乎没有工作,例如:

 describe('user_login.login', function () { it('sets the session vars', function (done) { let req = jasmine.createSpy('req') const res = { render: function (renderTemplate, renderValues) { let template = renderTemplate let values = renderValues } } const userLogin = require('../helpers/user_login') userLogin.login(process.env.USER, process.env.PASSWORD, req, res) expect(req.session.regenerate).toHaveBeenCalled() done() }) }) 

收益:

 Failures: 1) user_login.login sets the session vars Message: TypeError: Cannot read property 'regenerate' of undefined 

有没有办法让我访问会话variables而不向服务器发出请求? 我试图testingfunction本身,而不是服务器。 什么是嘲笑请求对象的正确方法?

谢谢你的时间。

嗯..你正在为请求对象创build一个间谍。 但你实际上是想窥探req.session.regenerate函数。

尝试用以下代替你的嘲笑的请求:

 let req = {session: {regenerate: jasmine.createSpy('regenerate')}}; 

好的,我明白了,谢谢@ ShabbY的帮助:

 describe('user_login.login', function () { it('sets the session vars', function (done) { let req = { session: { regenerate: function (fn) { return fn() } } } const res = { render: function (renderTemplate, renderValues) { let template = renderTemplate let values = renderValues } } const userLogin = require('../helpers/user_login') spyOn(req.session, 'regenerate').and.callThrough() userLogin.login(process.env.USER, process.env.PASSWORD, req, res) .then(function () { expect(req.session.user).toBe('myUser') done() })