超级testing,testing安全的REST API
我正在编写由jwt
保护的REST API的集成testing。 一个API操作POST /user/token
返回一个给定username
和password
的jwt
,然后使用该令牌来执行一系列操作,例如:
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
你想要执行单个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); });