У меня есть функция, которую я хочу протестировать с помощью 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)
})
})
Теперь тест проходит с ошибкой:
Ошибка типа: res.status (...). Send не является функцией
когда я удалил .send () из res.status в коде, тест проходит.
Я пытался выяснить, как смоделировать и status (), и send () на объекте res. но пока не нашли решения.
Tnx