我使用rspec 2.6.0和Capybara 1.1.1進行驗收測試。
隨着像下面這樣的觀點:水豚和Rspec:在()和have_selector()中一起使用的正確方法?
<tr >
<td>Team 3 Name</td>
<td>true</td>
<td><a href="/teams/3">Show</a></td>
<td><a href="/teams/3/edit">Edit</a></td>
<td><a href="/teams/3">Deactivate</a></td>
</tr>
<tr >
<td>Team 4 Name</td>
<td>true</td>
<td><a href="/teams/4">Show</a></td>
<td><a href="/teams/4/edit">Edit</a></td>
<td><a href="/teams/4">Deactivate</a></td>
</tr>
我想寫的驗收測試,指出:「團隊3不具備‘停用’的鏈接。」我期望以下失敗:
within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end
但它通過。爲了進一步測試發生了什麼,我寫了荒謬:
lock = false
within('tr', :text => 'Team 3 Name') do |ref|
page.should have_selector('a', :text => 'Deactivate')
page.should_not have_selector('a', :text => 'Deactivate')
lock = true
end
lock.should be_true
哪些也通過。
我從這裏假定,調用的has_selector()調用的作用域不受intra()塊的限制,但我不確定這是爲什麼。水豚文檔使用這種模式,似乎沒有提及任何陷阱。 什麼是正確的方式來限制我的選擇範圍? 謝謝。 /Salernost
你檢查,看看是否'page'是零通過一些奇怪的巧合,還是放在一個調試器在測試的頂部行,以便您可以進入控制檯並輸出「page」的值,或者添加步驟「並顯示頁面」,以便您的瀏覽器向您顯示處於所處狀態的頁面副本在它運行這個測試之前?如果是這樣,測試框架實際上看到了什麼? – jefflunt 2012-03-27 21:48:24
感謝您的回覆。我可以通過調試輸出來驗證頁面是否爲零,而且當我在within()塊內調用「puts ref.text」時,我會得到正確的:「Team 3 Name true Show Edit Deactivate」。請注意,我在()中使用了猴子補丁來生成上下文,以便我可以在其上調用文本。我在()之後進行了修補,但之後我發現了這種奇怪的行爲,因此不是根本原因。 :) – salernost 2012-03-28 01:15:44
[此主題](https://groups.google.com/forum/?fromgroups#!topic/ruby-capybara/1sdsA7nubyE)可能會引起您的興趣。 – 2012-03-29 00:03:05