2014-10-19 188 views
5

我正在編寫一個受jwt保護的REST API的集成測試。 一個API術後/user/token是返回jwt給予usernamepassword這個令牌然後用於如操作的列表:超級測試,測試安全REST API

GET /user/:id 

,在此路由使用jwt({secret: secret.secretToken}),所以令牌納入http標頭Authorization

當使用超級測試進行測試時,我可以進行嵌套測試,但是我想先獲取令牌,然後將此令牌用於其他操作測試。

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

如何避免生成新令牌每個操作測試(見下文),但僅使用單個一個由POST /用戶/令牌生成。

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 

回答

16

您想執行單個POST到/user/token,然後使用每個測試用例中收到的令牌嗎?如果是,則使用您正在使用的測試框架的before掛鉤(Mocha?)並將令牌存儲到變量中,例如

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

如何實現這一點,如果我們有多個文件和文件夾與分散在他們的單元測試,而無需重複令牌讓每個文件? – nottinhill 2015-03-30 11:28:28

+0

@SirBenBenji我認爲你只需要定義鉤子,以便你可以在需要的地方「需要」,例如。 http://stackoverflow.com/a/10561632會工作。另見https://github.com/mochajs/mocha/wiki/Shared-Behaviours – vesse 2015-03-31 09:05:54

0

需要設置授權爲「承載」 +令牌

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