【问题标题】:Supertest, test secure REST APISupertest,测试安全的 REST API
【发布时间】:2014-12-14 17:55:57
【问题描述】:

我正在为受jwt 保护的 REST API 编写集成测试。 一个 API 操作 POST /user/token 在给定 usernamepassword 的情况下返回 jwt,然后此令牌用于以下操作列表:

GET /user/:id

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

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

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

【问题讨论】:

    标签: node.js jwt supertest express-jwt


    【解决方案1】:

    您想对/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);
      });
    });
    

    【讨论】:

    【解决方案2】:

    需要设置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);
      });
    

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 1970-01-01
      • 2021-10-21
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      相关资源
      最近更新 更多