超级testing,testing安全的REST API

我正在编写由jwt保护的REST API的集成testing。 一个API操作POST /user/token返回一个给定usernamepasswordjwt ,然后使用该令牌来执行一系列操作,例如:

 GET /user/:id 

在路由使用jwt({secret: secret.secretToken}) ,令牌包含在http头Authorization

当使用超级testing进行testing时,我可以进行嵌套testing,但是我想先获取令牌,然后将此令牌用于其他操作testing。

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

如何避免为每个操作testing(见下文)生成一个新的标记,但只使用一个由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 

       

网上收集的解决方案 "超级testing,testing安全的REST API"

你想要执行单个POST到/user/token ,然后使用每个testing用例中收到的令牌? 如果是这样,那么使用你正在使用的testing框架的before钩(Mocha?)并将令牌存储到一个variables,例如

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