Неоднозначность шага огурца при использовании встроенного «внутри» степлера - PullRequest
1 голос
/ 10 июня 2011

Я создал пользовательский шаг огурца для проверки места назначения для ссылки, и я использую новую встроенную поддержку Cucumber в web_steps для определения области поиска.Таким образом, у меня есть два шага огурца:

# My step to verify the link
Then /^"([^\"]*)" should link to (.*)$/ do |link_text,page_name|
  page.should have_link(link_text, :href => path_to(page_name))
end

# Cucumber's built in step to scope things
# Single-line step scoper
When /^(.*) within ([^:]+)$/ do |step, parent|
  with_scope(parent) { When step }
end

Я использую это, имея сценарии огурца, которые делают что-то вроде

And "home" should link to the home page within the "Email Signature" section

Моя проблема в том, что я получаю неоднозначные совпадения на вышемежду этими двумя шагами, потому что предложение «inside» нельзя отличить от «домашней страницы», потому что у последней нет ограничивающих кавычек.

Я пытался изменить шаг ссылкичитать так, думая, что это может разрешить неоднозначность, не сопоставляя «внутри», но я думаю, что «внутри» поглощается предыдущей группой:

Then /^"([^\"]*)" should link to (.*)(?!within)$/ do |link_text,page_name|
  page.should have_link(link_text, :href => path_to(page_name))
end

Любые мысли о том, как решить эту проблему

Ответы [ 2 ]

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

Не прямой ответ на поставленный мною вопрос (см. Ответ Qtax), но вот что я в итоге сделал.В любом случае, я думаю, что это более удачное решение, хотя оно того стоит ...

Я создал специальную версию помощника определения объема, которая выглядит следующим образом:

Then /^within ([^,]*), (.+)$/ do |parent, step|
  with_scope(parent) { When step }
end

Это позволяет мненапишите шаги вроде этого:

And within the "Email Signature" section, "home" should link to the home page

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

1 голос
/ 10 июня 2011

Попробуйте что-то вроде:

/^"([^"]*)" should link to ((?:(?!within).)+)$/

Ничего не знаю о огурце, я просто иду по тому, что ты пытался сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...