У меня есть PUT / api / admin / tickets, в котором будут строки запроса.
Например: /api/admin/tickets?status=review&email=abcdef@gmail.com.API проверит MongoDB на наличие адреса электронной почты и обновит статус заявки на «разрешение».
Сначала он проверит строку запроса и, если она пуста, будет использовать req.body.status.
Как мне написать тест для него?
Я пробовал и использовал такие вещи, как .query и .send, но безрезультатно.
admin.js
router.put('/tickets', passport.authenticate('jwt', {session: false}), (req, res) => {
const decoded = jwt_decode(req.headers.authorization)
console.log("Admin Status: " + decoded.isAdmin)
if (decoded.isAdmin === false){
res.sendStatus(403);
console.log(decoded.isAdmin)
}
let query = {
email: req.query.email,
"tickets.content": req.body.content,
"tickets.label" : req.body.label,
"tickets.status" : req.body.status
}
let updated = {
"tickets.$.status": (!!req.query.status ? req.query.status : req.body.status),
"tickets.$.label" : (!!req.query.label ? req.query.label : req.body.label )
}
User.findOneAndUpdate(query, updated).then(posts=> {
// console.log("Document updated!")
// console.log(posts)
res.send(posts)
}).catch(err => console.log(err))
})
Мокко
it('Update ticket status, PUT /api/admin/tickets?status=resolved&email=abc@gmail.com', function(done){
ticketThatNeedsToUpdate = {
email: "abc@gmail.com",
// "tickets.status": "new",
"tickets.content": "I want to have access to the API demo!",
"tickets.label":"API Demo Services"
}
console.log(ticketThatNeedsToUpdate)
request(app)
.put('/api/admin/tickets?status=resolved&email=abc@gmail.com')
.send(ticketThatNeedsToUpdate)
.query({
email: 'abc@gmail.com',
status: 'resolve'
})
.set('Authorization', token)
.expect(200)
.end((err, res)=> {
console.log(res.body)
if (err) return done(err);
done();
});
});
Структура данных в MongoDB
tickets: Array
0: Object
status: "new"
content: "I want to have access to the API demo!"
status: "API Demo Services"
Этот фрагмент кода формирует строку запроса и проверяет, хочет ли администратор обновить информацию о тикете на основезапрос PUT.
В этом тестовом случае он находит заявку по электронной почте abc@gmail.com и должен обновить статус с «новый» до «разрешен» в MongoDB.
Когда я выполняю тест, console.log (res.body) имеет значение "{}".