Тест перенаправления с использованием шутки в экспресс - PullRequest
0 голосов
/ 21 июня 2019

Я использую Jest для проверки моего кода.Чего я хочу добиться - это проверить перенаправление с http на https.(если он существует, если process.env.IS_PRODUCTION).

Я не знаю, как это проверить, как это сделать и так далее ...

Я пробовал стандартное получениезапросить, но не знаю, как смоделировать переменную среды или протестировать ее по-другому

it('should redirect from http to https, (done) => {
  request(server)
    .get('/')
    .expect(301)
    .end((err, res) => {
      if (err) return done(err);
      expect(res.text).toBe('...')
      return done();
    });
}, 5000); 

Я ожидаю, что смогу проверить это перенаправление:)

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Вы можете использовать библиотеку node-mocks-http, которая позволяет имитировать объект запроса и ответа.

Пример:

const request = httpMocks.createRequest({
    method: 'POST',
    url: '/',
});
const response = httpMocks.createResponse();

middlewareThatHandlesRedirect(request, response);

Я никогда не работал с Jest, но я считаю, чтоВы можете проверить параметр response.location после того, как промежуточное ПО было вызвано

0 голосов
/ 21 июня 2019

Предисловие: я не знаком с шутками, экспрессами или нодами.Но я обнаружил, что намного проще протестировать явную конфигурацию (создание экземпляров объектов с явными значениями) по сравнению с неявной конфигурацией (переменные окружения и переключатели реализации на них):

Я не уверен, что request или server, но явный подход может выглядеть следующим образом:

it('should redirect from http to https, (done) => {
  const server = new Server({
    redirect_http_to_https: true,
  });
  request(server)
    .get('/')
    .expect(301)
    .end((err, res) => {
      if (err) return done(err);
      expect(res.text).toBe('...')
      return done();
    });
}, 5000); 

Это позволяет тесту явно настраивать сервер на нужное ему состояние вместо взлома со средой.


Этот подходтакже помогает сохранить конфигурацию процесса на верхнем уровне вашего приложения :

  const server = new Server({
    redirect_http_to_https: process.env.IS_PRODUCTION,
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...