Использование chai для имитации http-запросов

Я тестирую приложение nodejs, написанное с использованием экспресс. Для модульного тестирования я использую chai и sinon. У меня есть следующий маршрут в моем API, который я хотел бы протестировать.

В моем тесте я моделирую запрос на получение с помощью следующего кода:

 chai.request(app)
            .get('/downloads')
            .send({ wmauth: {
                    _identity: {
                        cn: "username",
                    }
                } })
            .end((err, res) => {
            res.status.should.be.equal(200);
            res.body.should.be.a('object');
            res.body.should.have.property('Items', []);

            AWS.restore('DynamoDB.DocumentClient');
            done();

Однако я всегда получаю сообщение об ошибке «Не удается прочитать свойство '_identity' of undefined». Поскольку объект «wmauth» не отправляется в запросе, он не определен. Я попытался использовать метод отправки, чтобы попытаться включить его в запрос, но безуспешно. Я думаю, мне нужно как-то издеваться над этим и отправить его в запрос, но я понятия не имею, как это сделать. Может ли кто-нибудь помочь мне с этим? Ниже метод для тестирования:

 app.get('/downloads', async (req, res) => {
    const created_by_cn = req.wmauth['_identity'].cn;
    if(!created_by_cn) {
        return res.status(400).json({
            error: 'Mandatory parameters: created_by_cn',
        });
    }
    try {
        const data = await downloadService.getDownloads(created_by_cn);
        return res.status(200).json(data);
    }
    catch(error){
        res.status(500).json({error: error.message});
    }
});

Благодарность


person fgonzalez    schedule 09.08.2018    source источник


Ответы (2)


Я думаю, вы забыли использовать req.body как в:

const created_by_cn = req.body.wmauth['_identity'].cn;

Надежда может решить вашу проблему

person deerawan    schedule 09.08.2018

Поскольку chai-http использует superagent, то, согласно его документу, вам необходимо использовать query() для передачи параметра запроса в get запросе:

chai.request(app)
            .get('/downloads')
            .query({ wmauth: {_identity: {cn: "username"}}})
            .end((err, res) => { ... });

Затем в маршруте express можно найти параметры в req.query:

app.get('/downloads', function (req, res) {  
  const created_by_cn = req.query.wmauth._identity.cn;
  ...
})
person Yohanes Gultom    schedule 09.08.2018