Мой собственный DSL поверх rspec, огурец - PullRequest
2 голосов
/ 12 августа 2011

Я заинтересован в применении еще одного уровня абстракции к моему BDD-пакету cucumber webrat, который знает о DOM, с которым я работаю.

В настоящее время я пишу определения шагов, например, в этом примере:

response_body.should have_selector("div", :id => 'left-side-bar') do |div|
  div.should have_selector("h1", :content => 'Hello')
  ... other stuff
end

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

left_sidebar.should have_heading("Hello")

По сути, я хочу представить конкретные объекты проекта, которые требуются моему клиентутакие пункты меню, блоки или виджеты, столбцы, нижний колонтитул и тому подобное в DSL.

Как бы я это сделал?Это практично?Мое приложение не является железнодорожным (если это имеет значение)

1 Ответ

4 голосов
/ 12 августа 2011

Это очень похоже на шаблон объекта страницы:

http://code.google.com/p/selenium/wiki/PageObjects

Это, безусловно, практично, и не имеет значения, что ваш проект не является приложением rails.

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

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

...