2011-03-10 45 views
3

所以這是一個非常新的問題。我的正則表達式在Cucumber中無法識別 - help!

我有一個一步,看起來像這樣:

Then /^I should see ((phrase 1) | (phrase 2))$/ do 
    #stuff 
end 

在那之後,我有一個一步,看起來像這樣:

Then /^I should see phrase 3$/ do 
    And %{I should see phrase 2} 
end 

我想考註冊流程。

phrase 1描述了需要填寫的信息,我需要驗證它們是否顯示在用戶的配置文件中。

phrase 3描述了所需的用戶填寫的可選信息。可選的信息應該顯示在用戶的配置文件中,我想測試它也顯示出來。

我不想從第一步複製和粘貼東西,所以我重新措詞phrase 1,以便從phrase 3步驟中調用它是有意義的,但我不知道如何正確引用它在第一步讓它工作。我從黃瓜那裏得到的是I should see phrase 2是未定義的。

什麼是正確的方式來得到這項工作?有沒有更好的方法來實現我的目標?

回答

4

空白字符是非常重要的正則表達式的

隨着你需要使用這個步驟管的兩端空白:

Then %{I should see phrase 1 } 

Then %{I should see phrase 2} 

(請注意,額外的空間在第一個的末尾,以及在第二個的seephrase2之間)。正則表達式仍然在尋找你指定它們的那些空格字符。

你的正則表達式將需要更改爲:

Then /^I should see (phrase 1|phrase 2)$/ do |phrase_name| 

end 

在正則表達式的|符號將匹配要麼所有左側右側的括號字符,所有字符(當然,它不會佔用整個字符串)。

此外,您必須將值傳遞給您的塊,正如我以phrase_name所做的那樣,當以這種方式使用圓括號時。雖然我可能寧願看到這樣定義的步驟:

Then /^I should see phrase ([\d]+)$/ do |phrase_number| 

end 

所以它將匹配所有三個你的那句類型的,你就不需要短語1定義了。 [\ d] +會匹配任何數字字符1次或更多次。

然後,您可以根據發送的短語編號做任何您需要的操作。我很想看到你的場景定義,但我不確定你是否正在根據這些信息正確地進行檢查。如果我看到故事的其他部分,也許我可以得到一些背景知識。

+0

謝謝!我最終實現了像'phrase_number'這樣的建議。 :) – user5243421 2011-03-11 00:09:29

相關問題