黄瓜:用双引号填写一个字段

时间:2011-12-16 12:09:58

标签: ruby-on-rails cucumber

我有一些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 个答案:

答案 0 :(得分:7)

当您在黄瓜场景中编写一个步骤时,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.

更新

您还可以在场景步骤中使用Cucumber的Multiline String

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 :(得分:1)

虽然google&#39>我刚刚发现an alternative solution这是(imho)更容易理解(或重新理解;))。我使用的是Java,但我确信在您的情况下可以重复使用相同的想法。

而不是使用此步骤定义:

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

我使用另一个转义字符(从"到/):

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

所以我可以使用双引号来编写该功能:

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