我正在测试使用express编写的nodejs应用程序。对于单元测试,我使用chai和sinon。我的API中有以下要测试的路由。
在测试中,我使用以下代码模拟get请求:
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'”。由于未在请求中发送对象“ wmauth”,因此未定义。我试图使用send方法尝试将其包括在请求中,但是没有运气。我想我需要以某种方式模拟它并将其发送到请求中,但不知道如何执行。有人可以帮我吗? 下面的方法进行测试:
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});
}
});
谢谢
答案 0 :(得分:0)
我想您忘记了使用req.body
,如:
const created_by_cn = req.body.wmauth['_identity'].cn;
希望可以解决您的问题
答案 1 :(得分:0)
由于chai-http
使用superagent
,因此根据其doc,您需要使用query()
才能在get
请求中传递查询参数:< / p>
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;
...
})