【发布时间】:2017-05-25 10:14:03
【问题描述】:
我有一个很简单的方法:
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
})
})
}
}
在我的单元测试中,我试图验证此方法是否确实正确设置了会话变量。我一直在尝试使用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
有什么方法可以让我在不向服务器发出请求的情况下访问会话变量?我正在尝试测试功能本身,而不是服务器。模拟请求对象的正确方法是什么?
感谢您的宝贵时间。
【问题讨论】:
标签: node.js unit-testing express jasmine mocking