Node.js 超级测试,测试安全RESTAPI

Node.js 超级测试,测试安全RESTAPI,node.js,jwt,supertest,express-jwt,Node.js,Jwt,Supertest,Express Jwt,我正在为受jwt保护的restapi编写一个集成测试。 一个API操作POST/user/token返回一个jwt,给定一个username和一个password,然后该令牌用于操作列表,例如: GET /user/:id 其中路由使用的是jwt({secret:secret.secretToken}),因此令牌包含在HTTP头授权中 当使用supertest进行测试时,我可以进行嵌套测试,但我希望首先获取令牌,然后使用该令牌测试其他操作 POST /user/token => 1234

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

GET /user/:id
其中路由使用的是
jwt({secret:secret.secretToken})
,因此令牌包含在HTTP头
授权中

当使用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

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

需要将授权设置为“承载人”+令牌

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

如果我们有多个文件和文件夹,其中分散着单元测试,而不重复每个文件中的令牌,如何实现这一点?@sirbenji我认为您只需要定义钩子,这样您就可以
在需要的地方要求它,例如,可以工作。另见