Express API がさまざまなシナリオで適切な HTTP ステータス コードを正しく返すことを確認するためのテストを作成しようとしています。テストで API へのリクエストにMocha とSupertestを使用しています。現在、非常に予想外の結果が得られています。詳細については、以下で説明します。
使用: 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' });
ここで何が起こっているのかについて、誰かが洞察を提供できますか?