2014-08-27 60 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) 
相关问题