AngularJS и Rails — e2e-тестакулярное тестирование. Как войти в систему для тестирования угловых страниц?

Вот проблема, с которой я столкнулся. Есть код, над которым я работаю. Код в основном представляет собой типичный MVC, написанный на Rails с файлами представления Haml.

Одна часть приложения использует AngularJS для выполнения всех крутых MVC в браузере.

Здесь нет проблем.

Чтобы использовать эту часть приложения, пользователь должен войти в систему, и здесь появляется проблема:

Я заметил интересное следующее поведение:
Если я даю своему тесту указание перейти и посетить страницу входа (или любую другую) с помощью Chrome

beforeEach(function() {
  browser().navigateTo('/help');
});

с тестом, который следует:

it('should scream for help', function() {
  expect(element('#test').text()).toMatch('Help!');
});

и HTML

<div>
  <h1>Help</h1>
  <p id="test">Help!</p>
</div>

Что я получаю, так это зависший браузер, а остальная часть теста не выполняется. Теперь, как только я добавлю angular к элементу веб-сайта:

<div ng-app>
  <h1>Help</h1>
  <p id="test">Help!</p>
</div>

Тесты выполняются, как и ожидалось (и красный, и зеленый).

Проблема, которую это вызывает у меня, заключается в том, что я практически не знаю, как войти в систему моего пользователя (с чем-то вроде блока «прежде всего»), чтобы я мог с радостью выполнять свои тесты на функциональность angular.

Для вещей, не связанных с javascript, я использую RSpec и Capybara, где я могу удобно вызвать пользователя sign_in.

Кто-нибудь знает, как войти в систему (используя страницы, отличные от anguar)? Возможно, есть лучший способ справиться с этим тестом? Я думал об использовании PhantomJS, как вы можете видеть в эпизоде ​​391 Railscasts, но я хотел бы использовать инструменты, рекомендованные Google. Я не настолько умен, чтобы изобретать велосипед :).

Все советы высоко ценятся.


person Lukasz Muzyka    schedule 01.02.2013    source источник
comment
Выглядит очень интересным вопросом, но я не знаю рельсы. Зачем нужно сшивать воедино так много технологий тестирования?   -  person Frederic Bazin    schedule 01.02.2013
comment
Я не. Я пытаюсь рассмотреть возможность использования некоторых из них, если это будет иметь смысл. Однако, поскольку я решил проблему, теперь я могу сказать, что testacular был тем, что я искал.   -  person Lukasz Muzyka    schedule 07.02.2013


Ответы (2)


Хорошо, вот что я сделал (если у вас есть лучшее решение, я буду благодарен):

  1. я использовал тестекулярный
  2. Поскольку форма входа не была «угловой», я добавил ng-app для обертывания div вокруг формы.
  3. Я добавил ng-model «логин» и «пароль» в свои поля ввода
  4. так как у меня было это, я мог использовать

    input('пароль').enter('ПАРОЛЬ ЗДЕСЬ');

  5. Затем просто нажмите «Отправить» и вуаля.

Теперь вот что было сложно:

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

warn (proxy): Proxy Request failed - Error: socket hang up 

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

Поэтому я добавил pause(); (вы можете добавить все, что хотите, чтобы немного подождать, если у вас возникнет такая же проблема)

ЗЕЛЕНЫЙ

person Lukasz Muzyka    schedule 07.02.2013

в основном вы хотите отправить логин/пароль пользователя в форму входа в beforeEach. напишите для этого функцию, взгляните на angular-scenario.js для объекта browser().

person Gal Ben-Haim    schedule 05.02.2013
comment
Я думал об этом, и я обнаружил, что если у меня нет углового содержимого, обернутого вокруг моей формы на странице входа в систему, мой testacular полностью проигнорирует страницу и ничего не выполнит. - person Lukasz Muzyka; 06.02.2013
comment
То, что я пробовал с тех пор, как задал этот вопрос, использовало что-то вроде капибароподобной помощи от полтергейста и phantomJS. Это оказалось довольно медленным с приложением, над которым я работаю. Спасибо, Галя, за ваш отзыв об этом. - person Lukasz Muzyka; 06.02.2013