2011-06-10 113 views
1

我已經創建了一個自定義黃瓜步驟來檢查鏈接的目的地,並且我正在使用Cucumber的新內置web_steps支持來確定這些查找的範圍。所以,我有兩個黃瓜涉及的步驟:使用內置'內'步驟scoper時,黃瓜步歧義

# My step to verify the link 
Then /^"([^\"]*)" should link to (.*)$/ do |link_text,page_name| 
    page.should have_link(link_text, :href => path_to(page_name)) 
end 

# Cucumber's built in step to scope things 
# Single-line step scoper 
When /^(.*) within ([^:]+)$/ do |step, parent| 
    with_scope(parent) { When step } 
end 

我通過使黃瓜的腳本,做這樣的事情

And "home" should link to the home page within the "Email Signature" section 

我的問題用這是我得到模棱兩可的匹配上述這兩個步驟之間,因爲除了「主頁」之外,「內部」子句不能被告知,因爲後者沒有任何邊界引號。

我試圖改變鏈接步驟閱讀這個樣子,認爲它可能是由不匹配的「內」化解歧義,但我認爲「內」得到由前述組,而不是誤服:

Then /^"([^\"]*)" should link to (.*)(?!within)$/ do |link_text,page_name| 
    page.should have_link(link_text, :href => path_to(page_name)) 
end 

有關如何解決此問題的任何想法?

+0

我的回答沒有用? – Qtax 2011-06-10 10:23:13

+0

嗨Qtax - 對不起,還沒有機會嘗試它 - 不用擔心我會:) – 2011-06-10 19:40:50

回答

1

試着這麼做:

/^"([^"]*)" should link to ((?:(?!within).)+)$/ 

不知道什麼黃瓜,我只是你試圖做什麼打算。

+0

非常感謝@ Qtax,效果超棒:)對不起,花了這麼長時間來測試它 - 我不小心打破了我的構建做別的事情,必須先解決它!附:找到了另一個解決方案/解決方法,我認爲我最終會選擇這個解決方案/解決方法,我將在下面單獨回答中概述。 – 2011-06-13 05:16:09

2

不是直接回答我提出的問題(對於Qtax的答案),但這是我最終做的。我認爲這是一個更好的解決方案,無論如何,對於它的價值......

我創建了作用域幫手,看起來像這樣的自定義版本:

Then /^within ([^,]*), (.+)$/ do |parent, step| 
    with_scope(parent) { When step } 
end 

這讓我寫這樣的步驟:

And within the "Email Signature" section, "home" should link to the home page 

我想這(一)讀起來更自然(它更清晰,我們正在談論的鏈接的電子郵件簽名部分,而不是主頁是),和(b)圍繞工作我遇到了問題,因爲沒有引用的「內部」選擇器已經遠離了未引用的內容頁面名稱。