2014-10-19 31 views
5

Piszę test integracji dla REST API chronionego przez jwt. Jeden API operacja POST /user/token jest zwrócenie jwt dali username i password i token ten jest następnie wykorzystywany do listy operacji, takich jak:Super test, test secure REST API

GET /user/:id 

Jeżeli trasa stosuje jwt({secret: secret.secretToken}), to znacznik jest włączony do nagłówek http Authorization.

Podczas testowania z super testem mogę przeprowadzić test zagnieżdżony, ale chcę najpierw uzyskać token, a następnie użyć tego tokena do innych testów operacyjnych.

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

Jak uniknąć generowania nowego tokenu dla każdego testu pracy (patrz poniżej), ale wykorzystać tylko jeden nie generować przez POST/user/tokena.

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 

Odpowiedz

16

Chcesz wykonać pojedyncze POST na /user/token, a następnie użyć tokena otrzymanego w każdym przypadku testowym? Jeśli tak, to użyj haka z używanej struktury testowej (Mocha?) I przechowuj token jako zmienną, np.

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

Jak to osiągnąć, jeśli mamy kilka plików i folderów z testów jednostkowych rozproszonymi w nich, bez powtarzania token dostaniem się każdy plik? – nottinhill

+0

@SirBenBenji Myślę, że po prostu musisz zdefiniować hak, aby móc go "wymagać" w razie potrzeby, np. http://stackoverflow.com/a/10561632 będzie działać. Zobacz także https://github.com/mochajs/mocha/wiki/Shared-Behaviours – vesse

0

trzeba ustawić Authorization jako 'okaziciela + tokena

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