【发布时间】:2019-02-12 18:53:17
【问题描述】:
我有一个想用 jest 测试的函数,该函数基本上会进行一些令牌验证并需要 3 个参数
这是我要测试的函数的解码代码:
const verifyToken = (req, res, next) => {
// check header or url parameters or post parameters for token
var token = req.headers['x-access-token']
if (!token) return res.status(403).send({ auth: false, message: 'No token provided.' })
// verifies secret and checks expire date
jwt.verify(token, config.secret, (err, decoded) => {
if (err) return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' })
//put user inside req.user to use the user in other routes
User.findById(decoded.id, (err, user) => {
if (err) {
return res.status(500).json({
message: err
})
} else if (!user) {
return res.status(404).json({
message: 'No user found'
})
} else {
req.user = user
}
next()
})
})
}
所以我正在编写第一个测试,它测试是否在请求中没有给出令牌,它会发送带有消息的 403。以下是测试。
const verifyToken = require('../../config/token')
describe('veryfiy token tests', () => {
it('Should give 403 status when no token is present', () => {
let mockReq = {
headers: {}
}
var mockRes = {
status: code => code
send: message => message
}
let nextCalled = false
let next = () => {
nextCalled = true
}
expect(verifyToken(mockReq, mockRes, next)).toBe(403)
})
})
现在测试通过并出现错误: TypeError: res.status(...).send 不是函数
当我从代码中的 res.status 中删除 .send() 时,测试通过了。
我一直试图弄清楚如何在 res 对象上同时模拟 status() 和 send()。但还没有找到解决办法。
Tnx
【问题讨论】:
标签: javascript node.js unit-testing express jestjs