1

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

ここで何が起こっているのかについて、誰かが洞察を提供できますか?

4

1 に答える 1

2

問題は次のコード スニペットにある可能性があります。

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

エラーが発生しているように見えますが、実際にはsupertestクライアントに返されていません。

次のように、ログに記録するだけでなく、エラーをクライアントに返してみることができます。

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

  res
    .status(500);
    .json({ error: error.message });
  return err;
}
于 2014-12-15T23:58:57.510 に答える