首页 > 解决方案 > rails 5.1.4 assert_select 'li',只检查第一个 li

问题描述

我正在通过 Rails 5.1 中的敏捷 Web 开发工作,我似乎遇到了测试问题。这本书说如果我有降价

<ul>
  <li>Home</li>
  <li>etc...</li>
</ul>

<ul>
  <% @cart.line_items.each do |item| %>
     <li>
       <%= item.quantity %> &times; <%= 
           item.product.title %>
     </li>
  <% end %>
</ul>

我应该能写出这段文字

assert_select 'li', '1 \u00d7 Programming Ruby 1.9'

并让它返回:true,但它只检查第一个 li 元素,

Failure:LineItemsControllerTest#test_should_create_line_item [/Users/coreygibson/Documents/workspace/Depot/test/controllers/line_items_controller_test.rb:27]:
<1 \u00d7 Programming Ruby 1.9> expected but was
<Home>..
Expected 0 to be >= 1.

有没有解决这个问题的设置?还是我错过了什么?这本书说这应该有效。

标签: ruby-on-railsrubytesting

解决方案


我不熟悉这本书,但从assert_selectdocs来看,它听起来像预期的那样工作:

如果第一个参数是一个元素,则以深度优先顺序 选择从(包括)该元素及其所有子元素开始的所有匹配元素。(强调我的)

由于“Home”在一个单独的ul父级中,我不确定,但我怀疑它找不到正确的li. 试试这个:

assert_select 'ul' do
  assert_select 'li', '1 \u00d7 Programming Ruby 1.9'
end

推荐阅读