繁体   English   中英

Supertest,测试安全的 REST API

[英]Supertest, test secure REST API

我正在为受jwt保护的 REST API 编写集成测试。 一个 API 操作 POST /user/token返回一个给定usernamepasswordjwt ,然后这个令牌用于一系列操作,例如:

GET /user/:id

其中路由使用jwt({secret: secret.secretToken}) ,因此令牌包含在 HTTP 标头Authorization

使用 supertest 进行测试时,我可以进行嵌套测试,但我想先获取令牌,然后使用此令牌来测试其他操作。

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

如何避免为每个操作测试生成一个新令牌(见下文),但只使用一个由 POST /user/token 生成的令牌。

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

您想对/user/token执行单个 POST,然后使用在每个测试用例中收到的令牌? 如果是这样,那么使用您正在使用的测试框架的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);
  });
});

需要将Authorization设置为 'Bearer' + token

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM