测试使用 jwt 令牌保护的路由的正确方法是什么?
What is the proper way to test routes secured with jwt token?
虽然下面的测试通过了,但我觉得我做错了。每次需要测试安全路由时,我是否都需要登录?我尝试在获得初始令牌后传递全局变量,但我发现传递变量非常反直觉。在 before() 调用中传递变量给我带来了与在嵌套承诺中传递/访问全局变量相同的问题。
describe('Users', function(done) {
var testToken = 'my-test-token'
it('logs in', function(done) { // <= Pass in done callback
var rT = 'tttttt'
chai.request(urlroot)
.post('/login')
.type('form')
.send({ email: 'test_user_1@this.com', password: '9999' })
.end(function(err, res) {
expect(res).to.have.status(200);
expect(res.body.token).to.be.a('string');
done()
});
});
it('gets all users', function(done) { // <= Pass in done callback
// console.log(urlroot + '/users');
chai.request(urlroot)
.post('/login')
.type('form')
.send({ email: 'test_user_1@this.com', password: '9999' })
.end(function(err, res) {
chai.request(urlapi)
.get('/users?secret_token='+res.body.token)
.end(function(err, res){
console.log('data', res.body);
// expect(res.body).to.be.json()
})
});
});
});
我所做的是使用 before()
方法调用我的身份验证服务,以与应用程序相同的方式获取令牌,并将其存储到变量中。
类似于:
var token = "";
before(async () => {
//Get token
token = "Bearer " + await getToken();
});
然后,在您想要使用凭据的每个测试中使用 .set()
it('...', function (done) {
chai
.request(url)
.set("Authorization", token) //Call .set() before .get()
.get("/users")
//...
})
虽然下面的测试通过了,但我觉得我做错了。每次需要测试安全路由时,我是否都需要登录?我尝试在获得初始令牌后传递全局变量,但我发现传递变量非常反直觉。在 before() 调用中传递变量给我带来了与在嵌套承诺中传递/访问全局变量相同的问题。
describe('Users', function(done) {
var testToken = 'my-test-token'
it('logs in', function(done) { // <= Pass in done callback
var rT = 'tttttt'
chai.request(urlroot)
.post('/login')
.type('form')
.send({ email: 'test_user_1@this.com', password: '9999' })
.end(function(err, res) {
expect(res).to.have.status(200);
expect(res.body.token).to.be.a('string');
done()
});
});
it('gets all users', function(done) { // <= Pass in done callback
// console.log(urlroot + '/users');
chai.request(urlroot)
.post('/login')
.type('form')
.send({ email: 'test_user_1@this.com', password: '9999' })
.end(function(err, res) {
chai.request(urlapi)
.get('/users?secret_token='+res.body.token)
.end(function(err, res){
console.log('data', res.body);
// expect(res.body).to.be.json()
})
});
});
});
我所做的是使用 before()
方法调用我的身份验证服务,以与应用程序相同的方式获取令牌,并将其存储到变量中。
类似于:
var token = "";
before(async () => {
//Get token
token = "Bearer " + await getToken();
});
然后,在您想要使用凭据的每个测试中使用 .set()
it('...', function (done) {
chai
.request(url)
.set("Authorization", token) //Call .set() before .get()
.get("/users")
//...
})