gpt4 book ai didi

node.js - Mocha + Supertest 中 404 测试的“Body Parse”错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:51 25 4
gpt4 key购买 nike

我正在尝试编写测试以确保我的 Express API 能够针对各种场景正确返回正确的 HTTP 状态代码。我正在使用 Mocha ,并且 Supertest用于测试中对 API 的请求。现在我得到了非常意想不到的结果,详情如下。

使用:Express、body-parser、Sequelize、Mocha、Supertest

获取/用户/:id

  models.User.find(req.params.id).complete(function(err, foundUser) {
if (err) {
logger.error(err, 'Error');
return err;
}

console.log('user: ' + foundUser);
if (foundUser != null) {
res.json({ user: foundUser.getJsonRepresentation() });
}
else {
res.status(404);
res.json({ error: 'Not found' });
}
});

此方法的测试

it('responds with the right user', function(done){
request(app)
.get(apiPath + '/users/' + createdUser.id)
.set('Accept', 'application/json')
.expect(function(res) {
res.body.user.id.should.equal(createdUser.id);
})
.expect(200, done);
});

it('responds with the right error code for non-existent resource', function(done) {
request(app)
.get(apiPath + '/users/1000')
.expect(404, function(err, res) {
console.log(err);
console.log('Response: ' + res);
done();
});
});

对于 404 测试,我在回调中收到以下错误:{ [Error: Parse Error] bytesParsed: 12, code: 'HPE_INVALID_STATUS' }res未定义

我已经为这个 expect 调用尝试了几种不同的语法形式:.expect(404, function(err, res) {,但没有一个起作用。我也为此尝试了所有不同的语法形式:

res.status(404);
res.json({ error: 'Not found' });

任何人都可以提供一些关于这里发生的事情的见解吗?

最佳答案

也许问题出在以下代码片段中:

if (err) {
logger.error(err, 'Error');
return err;
}

它似乎触发了错误,但实际上并未将其返回到 supertest 客户端。

您可以尝试将错误返回给客户端,而不仅仅是记录它,如下所示:

if (err) {
logger.error(err, 'Error');

res
.status(500);
.json({ error: error.message });
return err;
}

关于node.js - Mocha + Supertest 中 404 测试的“Body Parse”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27495056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com