2015-06-08 59 views
3

在黃瓜,Rspec和水豚我有一個測試,檢查一個按鈕有一個類。這是Rspec與水豚have_css匹配器不起作用

expect(@some_button).to have_css(".in-cart") 

失敗,但

@some_button['class'] 

回報

'btn product in-cart' 

使按鍵絕對有 '同車' 級。

作爲一項臨時措施,我改變了我的測試中; -

expect(@some_button['class']).to match /in-cart/ 

這顯然是瘋了。但爲什麼要'have_css'或'has_css?'對於明確具有預期類的DOM元素返回false?

另外page.all('。in-cart')包含按鈕,所以水豚肯定能找到它。

順便說一句,我也嘗試過'button.in-cart','in-cart',expect(etc).to have_selector,expect(etc.has_selector?('。in-cart'))to be_truthy and all組合。

+0

當您嘗試'expect(@some_button).to have_css(「btn.product.in-cart」)' – Richlewis

回答

6

have_css匹配有望應用於父容器,而不是實際的元素

# your view 
<div id="container"> 
    <div class="in_cart product"></div> 
</div> 

# your step definition 
parent = page.find('div#container') 
expect(parent).to have_css(".in-cart") 
# => returns true, as there is nested div.in_cart 
expect('div#container div').to have_css(".in-cart") 
# => returns false, as there is no such selector inside of the latter div 

相配套的具體對象的屬性,你得通過關鍵

簡單quering堅持
element = page.find('div#container div') 
element['class'].should include('in-cart') 
expect(element['class']).to match /in-cart/ 

同樣的邏輯適用於所有的RSpecMatchers

-1

預期(頁)。爲了have_css( 'button.in-車')

+0

'時,會發生什麼?這不會提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Jeeped

+1

是的,它確實 - 這將檢查頁面上有一個按鈕與類內購物車,這正是作者所說的他想要做的 –

+1

這看起來像你正在搜索整個頁面的任何按鈕類'。在-cart'。我認爲這個問題是關於檢查一個*特定*按鈕是否有這個類? –

1

在水豚/ Rspec的更新版本,在默認情況下,expect(page)將查詢查找匹配整個頁面;然而,有時我們可能不希望這樣做,而是傾向於定位頁面的特定類/區域。對於那些情況下,使用within縮小的page上下文:

within('.container') do 
    expect(page).to have_css(".in-cart") 
end 

假設,父具有類container水豚只是將這個元件內進行搜索。