node.js - How to test an express rest api with header parameters using mocha and supertest? -


i have test rest api. routes require value in http requests headers user authentication token.

i have separated interesting bussiness logic in pure javascript code can't find way test routes require token in headers of http request.

any other alternatives mocha and/or supertest welcome.

with supertest, can set header parameter set keyword :

api.get('/aroute/') ... .set('headerparametername', value) ... 

here example of testing express server api token authorization using 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 use route!'});   } );  app.use(function(err, req, res, next) {   res.status(err.status || 500).send({error: err.message}); });  app.listen(4040, function() {   console.log('server , running @ 4040 port'); });  module.exports = app; 

test.js:

var request = require('supertest'); var app = require('./app.js');  describe('test route 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 able consume route /test since no token sent', function(done) {     request(app)       .post('/test')       .expect(401, done);   });     it('should able consume route /test since token valid sent', function(done) {     request(app)       .post('/test')       .set('authorization', 'bearer ' + token)       .expect(200, done);   }); }); 

Comments