Как протестировать api экспресс-отдыха с параметрами заголовка с помощью мокко и супертеста?

Мне нужно протестировать свой rest api. Для некоторых маршрутов требуется значение в заголовках HTTP-запросов для токена аутентификации пользователя.

Я разделил свою интересную бизнес-логику на чистый код javascript, но я не могу найти способ проверить маршруты, для которых требуется токен в заголовках HTTP-запроса.

Приветствуются любые другие альтернативы мокко и / или супертесту.


person AlexB    schedule 16.07.2015    source источник
comment
Что вы имеете в виду под «правильным тестированием маршрутов»? Разве это не должны быть строки запроса?   -  person beautifulcoder    schedule 17.07.2015
comment
Я не совсем уверен, что понимаю вопрос, но вы проверяли Почтальон? Вы можете тестировать API и устанавливать заголовки по своему вкусу. getpostman.com   -  person Nathan Hornby    schedule 17.07.2015
comment
Я обновил свой вопрос, правильно протестируйте маршруты = протестируйте маршруты, которым требуется токен в заголовках запроса   -  person AlexB    schedule 17.07.2015


Ответы (1)


С помощью supertest вы можете установить параметр заголовка с помощью ключевого слова set:

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

Вот пример тестирования 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);
  });
});
person Wilson    schedule 17.07.2015