Как протестировать динамические детали в представлении (dhtml) с помощью рельсов: огурец, рспек, капибара? - PullRequest
4 голосов
/ 12 мая 2011

Я хочу и тестирование Ajax Content, и нормальное переключаемое содержимое через Javascript.

Моя настройка:

- Rails 3.1
- Rspec (Edge)
- Cucumber (Edge)
- Capybara (Edge)

Например, я хочу иметь форму, которая показывает определенные поляТолько если выбран определенный тип этой модели:

Товар может быть внешним товаром (url) или внутренним.Тип "externa_url" должен отображать 2 поля ввода и 2 флажка больше, чем тип "article", в котором вместо текста есть текстовое поле.

Каков наилучший способ реализовать это, в том числе с помощью тестирования?

Должно ли оно быть на стороне сервера, чтобы загружались частичные компоненты, если выбран определенный тип статьи, или с помощью javascript переключите нужный html?

1 Ответ

2 голосов
/ 03 июня 2011

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

Прежде всего, я хочу отметить, что я отвечаю на свой вопрос - делать только интеграционное тестирование. С огурцом и селеном. И специфическое тестирование javascript с жасмином.

Но при интеграционном тестировании с огурцовыми (краевыми) рельсами (3.1), капибарой и селеном вы должны знать о некоторых вещах:

Смотри, у тебя обновлены все драгоценные камни!

1) Активируйте свой драйвер, если вы этого еще не сделали

функция / поддержка / capybara.rb

Capybara.javascript_driver = :selenium

2) На данный момент только Firefox <= 4 работает с webdriver selenium для рельсов, как я узнал едва ли после нескольких часов настройки и установки каждого компонента с нуля, например, стойки и т. Д. </p>

3) Сама Капибара не очень хорошо справляется, что служит вам, например, ударом по ноге. особенно в списках, jquery-tokeninput.

3.1) Я использую это для выбора Предмета из токенов в списке:

When(/^I select the option containing "([^\"]*)" in the Tag List/) do |text|
  find("li:contains('#{text}')").click
end

Вы можете найти этот метод с помощью «locate» вместо find, не пытайтесь это сделать, api / driver изменился, чтобы найти. Функция поиска ожидает автоматически и проверяет ответ Ajax в дополнение к элементам поиска dom.

4) Добавьте собственные подпрограммы помощника / поиска / клика для вашего кода JS / Ajax, отвечающего, имейте в виду, что это «только» интеграционный тест, вы можете протестировать свой JS-код с помощью yasmine или другого js-тестового фреймворка.

Для получения дополнительной информации также проверьте Screencasts от Райана Бейтса (http://railscasts.com), он охватывает несколько тем по тестированию Rails; проверьте последнюю версию для Javascript, например,

Или этот блог: http://openmonkey.com/2010/04/09/javascript-testing-with-cucumber-capybara/ (спасибо Франсиско)

надеюсь, это поможет кому-то еще.

...