在Mocha + Supertest的404testing中出现“Body Parse”错误

我正在尝试编写testing以确保我的Express API正确地为各种情况返回正确的HTTP状态代码。 我在testing中使用Mocha和Supertest来请求API。 现在我得到了非常意想不到的结果,下面会详细介绍。

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

GET / 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' }); } }); 

testing这种方法

 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(); }); }); 

对于404testing,我得到这个错误: { [Error: Parse Error] bytesParsed: 12, code: 'HPE_INVALID_STATUS' }在callback中。 resundefined

我已经尝试了几种不同的语法forms,用于这个expect调用: .expect(404, function(err, res) {和他们都没有工作,我也试过所有不同的语法forms:

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

任何人都可以提供一些洞察到这里发生了什么?

也许这个问题是在下面的代码片段中:

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

这似乎是触发错误,但实际上并没有返回到supertest客户端。

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

 if (err) { logger.error(err, 'Error'); res .status(500); .json({ error: error.message }); return err; }