我正在为受jwt
保护的REST API编写集成测试。
一个API操作POST /user/token
返回jwt
给定username
和password
,然后此令牌用于以下操作列表:
GET /user/:id
路由使用jwt({secret: secret.secretToken})
的位置,因此令牌包含在http标头Authorization
中。
使用超级测试进行测试时,我可以进行嵌套测试,但我想首先获取令牌,然后使用此令牌进行其他操作测试。
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
答案 0 :(得分:23)
您想对/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);
});
});
答案 1 :(得分:0)
需要将授权设置为“承载”+令牌
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);
});