20

によって保護された REST API の統合テストを作成していjwtます。1 つの API 操作 POSTは、指定された aおよび aを/user/token返し、このトークンは次のような操作のリストに使用されます。jwtusernamepassword

GET /user/:id

ルートが使用されている場所ではjwt({secret: secret.secretToken})、トークンが HTTP ヘッダーに含まれていますAuthorization

スーパーテストでテストする場合、テストをネストできますが、最初にトークンを取得してから、このトークンを使用して他の操作をテストしたいと考えています。

POST /user/token => 12345
GET /user/:id, `Authorization Bearer 12345`
GET /user/:foo, `Authorization Bearer 12345`

操作テストごとに新しいトークンを生成することを回避する方法 (以下を参照) が、POST /user/token によって生成されるトークンを 1 つだけ使用する方法。

it('should get a valid token for user: user1', function(done) { 
  request(url)
    .post('/user/token')
    .send({ _id: user1._id, password: user1.password })
    .expect(200) // created
      .end(function(err, res) {
        // test operation GET /user/:id
4

2 に答える 2

46

単一の POST を実行して/user/token、すべてのテスト ケースで受け取ったトークンを使用したいですか? その場合は、使用してbeforeいるテスト フレームワークのフック (Mocha?) を使用し、トークンを変数に格納します。

describe('My API tests', function() {

  var token = null;

  before(function(done) {
    request(url)
      .post('/user/token')
      .send({ _id: user1._id, password: user1.password })
      .end(function(err, res) {
        token = res.body.token; // Or something
        done();
      });
  });

  it('should get a valid token for user: user1', function(done) { 
    request('/get/user')
      .set('Authorization', 'Bearer ' + token)
      .expect(200, done);
  });
});
于 2014-10-20T04:10:03.063 に答える