Огурец: заполните поле двойной кавычкой - PullRequest
3 голосов
/ 16 декабря 2011

У меня есть приложение rails, представление с полем, скажем, оно называется 'some_field', которое я хочу заполнить в поле '' SOME_STRING_WITH_QUOTES "'

Как мне это сделать в огурце?

When I fill in "some_field" with ""SOME_STRING""

When I fill in "some_field" with "\"SOME_STRING\""

не работает (парсер огурца, похоже, не одобряет) Что делать?Это не своего рода совпадение, поэтому регулярное выражение не будет работать ни

Ответы [ 2 ]

7 голосов
/ 16 декабря 2011

Когда вы пишете шаг в сценарии с огурцом, Cucumber предлагает вам стандартное регулярное выражение для сопоставления текста внутри двойных кавычек (регулярное выражение [^ "] * означает последовательность из 0 или более символов любого вида, кроме символа«) , Поэтому для When I fill in "some_field" with: "SOME_STRING" будет предложено следующее определение шага:

When /^I fill in "([^"]*)" with: "([^"]*)"$/ do |arg1, arg2|
    pending # express the regexp above with the code you wish you had
end 

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

When /^I fill in "([^"]*)" with: (.*)$/ do |field, value|
    pending # express the regexp above with the code you wish you had
end

Тогда ваш сценарий будет выглядеть так:

When I fill in "some_field" with: "all " this ' text will ' be matched.

Обновление

Вы также можете использовать Многострочную строку огурца на шаге Сценария:

When I fill in "some_field" with: 
  """
  your text " with double quotes
  """

И тогда вам не нужно будет изменять определение шага, генерируемое Cucumber:

When /^I fill in "([^"]*)" with:$/ do |arg1, string|
  pending # express the regexp above with the code you wish you had
end

Ваша строка с кавычками будет передана в качестве последнего аргумента. На мой взгляд, этот подход выглядит тяжелее, чем первый.

1 голос
/ 16 апреля 2015

Во время google'ing я только что нашел альтернативное решение , которое (imho) более легко понять (или переосмыслить;)).Я использую Java, но я уверен, что та же идея может быть повторно использована в вашем случае ..

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

@Then("parameter \"(.*?)\" should contain \"(.*?)\"$")

Я использую другой escape-символ (из"to /):

@Then("parameter \"(.*?)\" should contain /(.*?)/$")

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

Then parameter "getUsers" should contain /"name":"robert","status":"ACTIVE"/
...