2014-10-19 6 views
5

Ich schreibe Integrationstest für eine REST-API durch eine jwt geschützt. Ein API /user/token Betrieb POST ist die Rückkehr eines jwt ein gegebenen username und ein password und dieses Token wird dann für eine Liste von Operationen wie verwendet:Super test, test sicher REST API

GET /user/:id 

Wo die Route jwt({secret: secret.secretToken}) verwendet, so wird das Token enthält in der HTTP-Header Authorization.

Beim Testen mit Super-Test kann ich Test verschachtelt haben, aber ich möchte zuerst das Token erhalten, dann dieses Token für andere Betriebstests verwenden.

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

Wie kann man vermeiden ein neues Token für jeden Betrieb Tests zu erzeugen (siehe unten), sondern verwenden nur ein einziger von POST/user/Token generieren.

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 

Antwort

16

Sie wollen einzelne POST /user/token durchzuführen und dann den Token in jedem Testfall erhielt verwenden? Wenn ja, dann verwenden Sie den before Hook des Test-Frameworks, das Sie verwenden (Mocha?), Und speichern Sie das Token auf einer Variablen, z.

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

festlegen, wie dies zu erreichen, wenn wir in ihnen mehrere Dateien und Ordner mit Unit-Tests verteilt haben, ohne den Token Wiederholung in jeder bekommen Datei? – nottinhill

+0

@SirBenBenji Ich denke, Sie müssen nur den Haken definieren, so dass Sie es benötigen können, z. http://stackoverflow.com/a/10561632 würde funktionieren. Siehe auch https://github.com/mochajs/mocha/wiki/Shared-Behaviours – vesse

0

Need Authorization als 'Träger' + Token

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