Joh*_*ohn 39 rspec capybara ruby-on-rails-3 ruby-on-rails-3.1
我正在使用RSpec/Capybara作为我的测试套件.我有一些动态附加<li>到j 的结尾的javascript <ul>.我想写一个请求规范来确保这种情况发生.
我尝试使用has_cssCapybara方法和高级CSS选择器来测试<li>元素的排序,但Capybara不支持+CSS选择器.
例:
page.should have_css('li:contains("ITEM #1")')
pseuo_add_new_li
page.should have_css('li:contains("ITEM #1")+li:contains("ITEM #2")')
Run Code Online (Sandbox Code Playgroud)
有没有人知道测试订购的另一种方法?
Joh*_*ohn 33
我通过测试针对页面正文内容的正则表达式匹配来解决此问题.有点kludgy,但它的工作原理.
page.body.should =~ /ITEM1.*ITEM2.*ITEM3/
Run Code Online (Sandbox Code Playgroud)
dgi*_*rez 29
我发现了一种使用CSS测试此行为的更规范的方法.你可以用户:first-child,:last-child以及:nth-child(n)在哪个断言你喜欢的选择.
在你的例子中,我会尝试这些断言:
page.should have_tag("ul:last-child", :text => "ITEM #1")
pseuo_add_new_li
page.should have_tag("ul:nth-last-child(2)", :text => "ITEM #1")
page.should have_tag("ul:last-child", :text => "ITEM #2")
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助别人.阅读更多相关信息.
小智 27
本文列出了几种在RSpec中测试排序顺序的方法,其中最好的方法似乎是这个匹配器:
RSpec::Matchers.define :appear_before do |later_content|
match do |earlier_content|
page.body.index(earlier_content) < page.body.index(later_content)
end
end
Run Code Online (Sandbox Code Playgroud)
我最近遇到了同样的问题,并找到了这个简洁而理想的解决方案:http : //launchware.com/articles/acceptance-testing-asserting-sort-order
它甚至被包装成一颗小宝石。
您可以使用all finder 方法选择多个元素,然后使用collect 将文本提取到数组中:
assert_equal page.all('#navigation ul li').collect(&:text), ['Item 1', 'Item 2', 'Item 3']
Run Code Online (Sandbox Code Playgroud)
如果您的列表在页面上不可见(例如弹出导航菜单),则需要传递visible: false到该all方法。
| 归档时间: |
|
| 查看次数: |
13958 次 |
| 最近记录: |