Я пытаюсь написать тесты, чтобы гарантировать, что мой Экспресс-API правильно вернет правильные коды состояния HTTP для различных сценариев. Я использую Mocha и Supertest для запросов API в тестах. Сейчас я получаю очень неожиданные результаты, которые подробно описаны ниже.Ошибка «Body Parse» для теста 404 в Mocha + Supertest
Использование: Express, тело-парсер, Sequelize, мокко, Supertest
GET/пользователи /: 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' });
Может кто-нибудь предложить некоторое представление о том, что здесь происходит?