首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Supertest,测试安全REST API

Supertest,测试安全REST API
EN

Stack Overflow用户
提问于 2014-10-20 02:35:26
回答 2查看 17.4K关注 0票数 20

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

代码语言:javascript
复制
GET /user/:id

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

当使用supertest进行测试时,我可以进行嵌套测试,但我希望首先获得令牌,然后使用该令牌来测试其他操作。

代码语言:javascript
复制
POST /user/token => 12345
GET /user/:id, `Authorization Bearer 12345`
GET /user/:foo, `Authorization Bearer 12345`

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-20 12:10:03

您想对/user/token执行单次POST,然后使用在每个测试用例中收到的令牌吗?如果是这样,那么使用您正在使用的测试框架的before钩子(Mocha?)并将令牌存储到变量中,例如

代码语言:javascript
复制
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);
  });
});
票数 45
EN

Stack Overflow用户

发布于 2017-02-25 11:16:31

需要将授权令牌设置为‘持有者’+

代码语言:javascript
复制
 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);
  });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26453990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档