2014-10-19 22 views
5

Tôi đang viết kiểm tra tích hợp cho một API REST được bảo vệ bởi một jwt. Một API hoạt động POST /user/token là trả lại một jwt cho một usernamepassword và mã thông báo này sau đó được sử dụng cho một danh sách các hoạt động như:Kiểm tra siêu, kiểm tra REST API an toàn

GET /user/:id 

Trong trường hợp tuyến đường được sử dụng jwt({secret: secret.secretToken}), vì vậy các token được đưa vào tiêu đề http Authorization.

Khi thử nghiệm với siêu thử nghiệm, tôi có thể thử nghiệm lồng nhau nhưng tôi muốn nhận mã thông báo đầu tiên, sau đó sử dụng mã thông báo này để kiểm tra hoạt động khác.

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

Cách tránh tạo mã thông báo mới cho mọi thử nghiệm hoạt động (xem bên dưới) nhưng chỉ sử dụng một mã thông báo duy nhất được tạo bởi POST/người dùng/mã thông báo.

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 

Trả lời

16

Bạn muốn thực hiện POST đơn lẻ đến /user/token và sau đó sử dụng mã thông báo nhận được trong mọi trường hợp kiểm tra? Nếu vậy, hãy sử dụng móc before của khung kiểm tra bạn đang sử dụng (Mocha?) Và lưu mã thông báo vào biến, ví dụ:

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

Làm thế nào để đạt được điều này nếu chúng ta có nhiều file và thư mục với các bài kiểm tra đơn vị phân tán trong họ, mà không lặp lại những dấu hiệu nhận được trong mỗi tập tin? – nottinhill

+0

@SirBenBenji Tôi nghĩ bạn chỉ cần xác định móc để bạn có thể 'yêu cầu 'ở nơi cần thiết, ví dụ: http://stackoverflow.com/a/10561632 sẽ hoạt động. Xem thêm https://github.com/mochajs/mocha/wiki/Shared-Behaviours – vesse

0

Cần thiết Authorization là 'Bearer' + thẻ

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); 
    }); 
Các vấn đề liên quan