我正在尝试编写测试以确保我的 Express API 为各种场景正确返回正确的 HTTP 状态代码。我在测试中使用 Mocha 和Supertest来请求 API。现在我得到了非常意想不到的结果,下面详细介绍。
使用:Express、body-parser、Sequelize、Mocha、Supertest
获取 /users/: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
是undefined
。_
我为这个expect
调用尝试了几种不同的语法形式:.expect(404, function(err, res) {
但没有一个有效。我也为此尝试了所有不同的语法形式:
res.status(404);
res.json({ error: 'Not found' });
任何人都可以对这里发生的事情提供一些见解吗?