Огурец, как проверить, есть ли у родителя определенный класс? - PullRequest
1 голос
/ 18 июля 2011

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

Then the element "([^"]*)" with parent "([^"]*)" should have class "([^"]*)" do |element_id,parent,css_class|
  response.should have_selector "#{parent} .#{css_class}" do |matches|
    matches.should have_selector element_id
  end
end

1 Ответ

2 голосов
/ 18 июля 2011

Технически, это не совсем то, что вы должны тестировать с огурцом. Cucumber предназначен для тестирования поведения, а не для проверки DOM - хотя, конечно, его можно использовать таким образом.

Если вы действительно хотите написать что-то вроде этого, вы можете сделать это намного проще:

Then /^the element "([^"]*)" with parent "([^"]*)" should have class "([^"]*)"$/ do |element_id,parent,css_class|
  page.should have_css("#{parent}.#{css_class} #{element_id}")
end

Хотя на многих уровнях это отстой. Мало того, что вы проверяете DOM непосредственно с шага, который делает для очень нечитаемых функций, но вы смешиваете передачу имен элементов, имен классов и идентификаторов элементов - каждый с немного другим стилем ... На этом этапе элемент может быть любым типом селектора, тогда как parent и css_class гораздо более фиксированы - они всегда должны «вписываться» в строку селектора, иначе ничего не будет найдено.

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

Кроме того, с более выразительным наименованием, тест мгновенно становится более полезным в дальнейшем. Например, шаг Then I should see the current list is active гораздо более читабелен и выразителен, чем Then the element "li.active" with parent "ul" should have class "active-list". Будьте конкретны в реализации определения шага, а не в своих возможностях!

Прочитайте это сообщение в блоге - http://elabs.se/blog/15-you-re-cuking-it-wrong - оно должно дать вам хорошее представление о том, как написать более эффективные шаги.

...