2014-08-27 63 views
1

在Rails 4特性規範中,使用RSpec 3和Capybara,如果頁面中存在一定數量的特定標籤,我該如何聲明?如何使用RSpec檢查頁面中有多少特定的HTML元素?

我想:

expect(find('section.documents .document').count).to eq(2) 

但它不工作,他說:

Ambiguous match, found 2 elements matching css "section.documents .document" 

而且,它是一個好主意/不好的做法在這樣特定的功能規範的東西來測試視圖中使用的標籤和類的種類?

回答

3

使用find時出現的問題是它的意思是返回一個匹配元素。要查找所有匹配的元素,然後可以計算,您需要使用all

expect(all('section.documents .document').count).to eq(2) 

然而,這種方法不使用水豚的等待/查詢方法。這意味着如果元素異步加載,斷言可能會隨機失敗。例如,all檢查有多少元素存在,元素完成加載,然後斷言將失敗,因爲它將0與2進行比較。相反,使用:count選項會更好,該選項等待指定數量的元素存在。

expect(all('section.documents .document', count: 2).count).to eq(2) 

有這一些代碼的冗餘和斷言消息會有點怪(因爲將會有一個例外,而不是一個測試失敗),所以這將是最好也改用have_selector

expect(page).to have_selector('section.documents .document', count: 2) 
相關問題