Arhn - архитектура программирования

Изменить ответ http в тесте транспортира

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

Когда наш сервер отвечает на успешный вход в систему, объект пользователя возвращается с полем changePassword. Затем клиент проверяет ответ и соответствующим образом перенаправляет.

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

Я вижу свои варианты как:

  1. Настройте и отключите тестовый сценарий для сервера, который создает нового пользователя специально для тестового запуска с установленным флагом changePassword в базе данных.

    Это похоже на самый от начала до конца подход, но, вероятно, он требует больше всего усилий и кода.

  2. Каким-то образом перехватите ответ http в тесте и измените флаг changePassword, чтобы он был установлен только для этого теста.

  3. Полностью смоделируйте ответ http. Использование этого подхода наиболее удалено от от начала до конца теста, но, возможно, является самым простым?

Какой подход является лучшим или наиболее распространенным? Также любые общие указатели на то, как на самом деле реализовать вышеизложенное (в частности, 1 и 2) с транспортиром, были бы отличными - мне это сложно чтобы концептуально разобраться в моей голове, и, следовательно, трудно понять, что искать.

Я использую protractor в качестве тестовой среды, с angular.js на стороне клиента и сервером node, использующим (среди прочего ) express.js и mongoDB.

22.10.2014

  • Здравствуйте, у меня такая же ситуация. Какой вариант у вас получился. Как вы думаете, возможен ли вариант 2 (и если да, то изучили ли вы его) Спасибо! Это сводит меня с ума... :С 25.11.2014
  • Да, № 2 возможен, сейчас я добавлю ответ. 25.11.2014

Ответы:


1

Подумав об этом дальше, вариант 1 является лучшим решением, но не всегда возможен.

Вариант 2 также возможен, а варианта 3 следует избегать.

Для второго варианта фиктивный модуль можно создать так: (coffeescript)

e2eInterceptors =->

  angular.module('e2eInterceptors', [])
  .factory('loginInterceptor', ()->
    response: (response)->
      # Only edit responses we are interested in
      return response unless response.match(/login/)
      # do the modifiations
      response.data.changePassword = true
      # return the response
      return response
  )
  .config(($httpProvider)->
    $httpProvider.interceptors.push('loginInterceptor')
  )

Затем вы можете внедрить этот модуль в свои тесты, используя

browser.addMockModule('e2eInterceptors', e2eInterceptors)

Если вы хотите сделать это глобально, вы можете поместить это в функцию onPrepare в вашем файле транспортира, в противном случае просто вызывайте ее при необходимости в тестах.

25.11.2014
  • Я пытаюсь использовать этот подход, но всякий раз, когда я добавляю фиктивный модуль, внезапно мои локаторы элементов говорят мне, что они не могут найти никаких элементов до загрузки dom. Тест не пройден, и селен завершает работу примерно через 1 секунду. 29.01.2016
  • Звучит запутанно, понятия не имею, где это, возможно, где-то опечатка, возможно, в названии модуля. 29.01.2016
  • Я получил эти ошибки и исправил их, а затем он начал терпеть неудачу. Так что это по крайней мере не те ошибки. 29.01.2016
  • Хм, возможно, вы были правы, я понятия не имею, что это было, но я переделал это, и эта ошибка исчезла. Однако не похоже, что перехватчик вызывается по запросу на размещение. 29.01.2016
  • Да, хм, он у меня есть в другом файле с export.e2einterceptor = function() { angular.module interceptor code here, но он не вызывается. Вот еще одна проблема, которую я сделал для нее, если вы хотите помочь, что будет очень признательно. Я пытаюсь просмотреть данные, переданные в запрос. stackoverflow .com/questions/35088695/ 29.01.2016
  • Я сделал неверное предположение. Это работало, но в браузере, конечно. По какой-то причине я ожидал, что он будет вести консольный журнал на консоли транспортира. 29.01.2016

  • 2

    Я думаю, что ваш первый подход является наиболее подходящим.

    В любом случае было бы полезно протестировать создание нового пользователя, так что это не пустая трата времени. И, например, этот пример кажется чем-то похожим: http://product.moveline.com/testing-angular-apps-end-to-end-with-protractor.html

    02.11.2014
  • На самом деле приведенный вами пример не соответствует вашему ответу. Они используют подход 3 из моего вопроса. 03.11.2014
  • Эх извините. Я читаю только до раздела «Базовое тестирование», который я считаю актуальным, но вы правы, что раздел «Основы» — это подход 3, как вы упомянули. 03.11.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..