2014-10-19 19 views
5

Sto scrivendo test di integrazione per un'API REST protetta da jwt. Un'API operazione POST /user/token è restituire un jwt dato un username e password e questo token viene quindi utilizzato per un elenco di operazioni quali:Test super, test REST API

GET /user/:id 

Se l'itinerario utilizza jwt({secret: secret.secretToken}), quindi il token è incluso in l'intestazione http Authorization.

Quando si esegue il test con super test, è possibile eseguire test nidificati, ma prima desidero ottenere il token, quindi utilizzare questo token per altri test delle operazioni.

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

Come evitare la generazione di un nuovo token per ogni test funzionamento (vedi sotto), ma usare solo un singolo generare da 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 

risposta

16

si desidera eseguire singolo POST per /user/token e quindi utilizzare il token ricevuto in ogni caso di test? In tal caso, utilizzare il gancio before del framework di test che si sta utilizzando (Mocha?) E memorizzare il token in una variabile, ad es.

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

Come raggiungere questo obiettivo se abbiamo più file e cartelle con unit test dispersi in esse, senza ripetere il token entrare in ogni file? – nottinhill

+0

@SirBenBenji Penso che sia sufficiente definire il gancio in modo da poterlo "richiedere" dove necessario, ad es. http://stackoverflow.com/a/10561632 funzionerebbe. Vedi anche https://github.com/mochajs/mocha/wiki/Shared-Behaviours – vesse

0

necessario impostare Autorizzazione come 'portatore' + gettone

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