Почему мой тест на огурец не проходит при работе с Selenium? - PullRequest
3 голосов
/ 02 апреля 2011

Я тестирую приложение Rails 3 с комбо Cucumber / Capybara.Я также пытаюсь использовать Selenium для тестирования некоторых специфических сценариев JavaScript, но сталкиваюсь со странными трудностями, которых я не понимаю.

Мой опыт работы с Cucumber / Capybara довольно низкий, мой опыт работы с Selenium равен нулю.

Вот сценарий:

Scenario: Browsing events
  Given many events exist
  And I am on the events page
  Then I should see a list of 15 events
  When I follow the first event
  Then I should be on the event page
  And I should see a google map
  And I should see the event details

Когда этот сценарий выполняется под RackTest, он проходит до шага Google Map, и в этот момент происходит сбой из-за отсутствия JavaScript.Это ожидаемо.

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

Кстати, первый шаг (существует много событий), использует FactoryGirl длясоздать массу событий.

Так как это все довольно ново для меня, мне интересно, поймали ли меня обычная ловушка?Я не внес никаких изменений в конфигурацию, кроме стандартной установки с rails g cucumber:install.Кроме того, если это уместно, я использую OSX.

Спасибо

Ответы [ 2 ]

7 голосов
/ 21 мая 2011

Для тех, у кого такая же проблема с базой данных в тестах на селен, вот очень полезный чат с тремя основными решениями, обобщенными Йонасом (см. Первое сообщение 5 апреля): https://groups.google.com/forum/#!msg/ruby-capybara/JI6JrirL9gM/R6YiXj4gi_UJ

7 голосов
/ 03 апреля 2011

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

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

https://github.com/bmabey/database_cleaner

Edit:

Впоследствии мне стало известно, что можно использовать транзакционными светильниками с тестами Selenium, и производительность будет лучше, если вы это сделаете (кредит Кира Корина). Подробнее см. http://pastie.org/1745020.

...