2011-12-16 61 views
3

我有一些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\"" 

不工作(黃瓜解析器似乎不批准) 怎麼辦?它不是某種匹配器,所以正則表達式也不會工作

回答

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. 

更新

您也可以使用黃瓜的Multiline String在方案中的步驟:

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

然後你就不會需要更改黃瓜生成步驟定義:

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

你帶引號的字符串將作爲最後一個參數傳遞。在我看來,這種方法看起來比第一個更重。

+0

謝謝你,我希望有一個更通用的解決方案,而無需爲它寫一個步驟(例如一個轉義字符,我找不到) – SirLenz0rlot 2011-12-16 13:51:44

1

雖然google'ing我剛剛發現an alternative solution這是(恕我直言)更容易理解(或重新理解;))。我使用Java,但我敢肯定,同樣的想法可能在你的情況下,可以重複使用..

而不是使用此步驟定義:

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

我用另一種逃避字符(從「爲/) :

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

這樣我就可以使用雙引號寫功能:

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