![](/img/trans.png)
[英]Using Supertest in Mocha to test Node.js Express API and MongoDB
[英]How to test an express rest api with header parameters using mocha and supertest?
我必須測試我的休息api。 某些路由需要用戶身份驗證令牌的http請求標頭中的值。
我已經在純javascript代碼中分離了我有趣的業務邏輯,但是我找不到一種方法來測試在http請求的頭部中需要令牌的路由。
歡迎使用mocha和/或supertest的任何其他替代品。
使用supertest,您可以使用set關鍵字設置標頭參數:
api.get('/aroute/')
...
.set('headerParameterName', value)
...
以下是使用supertest
測試帶有令牌授權的快速服務器API的supertest
:
app.js
:
var express = require('express');
var app = express();
var jwt = require('jsonwebtoken');
var expressJwt = require('express-jwt');
var secret = 'my-secret';
app.get('/get-token', function(req, res) {
var token = jwt.sign({foo: 'bar'}, secret);
res.send({token: token});
});
app.post(
'/test',
expressJwt({
secret: secret
}),
function(req, res) {
res.send({message: 'You could use the route!'});
}
);
app.use(function(err, req, res, next) {
res.status(err.status || 500).send({error: err.message});
});
app.listen(4040, function() {
console.log('server up and running at 4040 port');
});
module.exports = app;
test.js
:
var request = require('supertest');
var app = require('./app.js');
describe('Test Route with Token', function() {
var token = '';
before(function(done) {
request(app)
.get('/get-token')
.end(function(err, res) {
var result = JSON.parse(res.text);
token = result.token;
done();
});
});
it('should not be able to consume the route /test since no token was sent', function(done) {
request(app)
.post('/test')
.expect(401, done);
});
it('should be able to consume the route /test since token valid was sent', function(done) {
request(app)
.post('/test')
.set('Authorization', 'Bearer ' + token)
.expect(200, done);
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.