2017-01-25 45 views
1

我是YAML的新手,我正在嘗試編寫一些語言翻譯測試。我的想法是,我有一個YAML文件,其中包含英文和威爾士版本的相同文本。我想知道如何在YAML中的字符串中使用正則表達式?Yaml中的Ruby正則表達式

例子:

我有這樣的基本測試:

#Gherkin 
And I expect to see payment confirmation for "Dave" 

#Step Def 
    And /^I expect to see payment confirmation for "(.*?)"$/ do |user| 
     expect(page).to have_text "Payment successful for #{user} - Reference: 000000" 
end 

YAML入門:

"Payment successful for Dave reference: 000000" 
- welsh: "Taliad llwyddiannus ar gyfer Dave Cyfeirnod: 000000" 

我能在YAML項參數戴夫作爲測試套件涵蓋數百個用戶。

感謝

+0

你能解釋一下你想要更好一點嗎? 我不確定您是否想要更改測試以適應所有可能的YAML條目,或者創建一個可以在其中插入文本的YAML。 此外,該代碼示例似乎不是有效的RSpec語法,你能更新嗎? –

+0

如果可能,我想在YAML中插入文字。在Capybara中使用RSpec-Expectations,這是頁面上簡單文本斷言的語法。 – Tom

回答

5

如果你想插文成YAML您將需要更換要與%{keyword}進行插值的話,其中的關鍵詞是將被用來指示內插有該數據的密鑰。

如果您使用Rails,則可以使用t輔助方法,如this section of the I18n guide中所述。

# The YAML file 
en: 
    payment_succeeded: "Payment successful for %{first_name} reference: %{reference_number}" 
wh: 
    payment_succeeded: "Taliad llwyddiannus ar gyfer %{first_name} Cyfeirnod: %{reference_number}" 

# Rails Controller/View/Model 
t(:payment_succeeded, first_name: 'Dave', reference_number: '000000') 

如果你想要一個純粹的ruby實現,你可以使用Kernel::format方法。

# The YAML file 
# NOTE: This can be in any format, as long as you use %{keyword} in places where you want the data to be interpolated 
translations: 
    english: "Payment successful for %{first_name} reference: %{reference_number}" 
    welsh: "Taliad llwyddiannus ar gyfer %{first_name} Cyfeirnod: %{reference_number}" 

# Ruby 
translations = YAML.load(File.read('translations.yaml')) 
string = format(translations[:translations][:welsh], first_name: 'Dave', reference_number: '000000') 

希望這會有所幫助。

+0

我會試試這個,謝謝 – Tom