如何编写测试以通过使用supertest / superagent检查查询和主体参数来更新票证?

时间:2019-04-08 12:22:44

标签: node.js mongodb mocha supertest superagent

我有一个将包含查询字符串的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)为“ {}”。

0 个答案:

没有答案