我正在Rails 5.1中进行敏捷Web开发,似乎在测试方面遇到了问题。这本书说我是否有降价之类的
<ul>
<li>Home</li>
<li>etc...</li>
</ul>
<ul>
<% @cart.line_items.each do |item| %>
<li>
<%= item.quantity %> × <%=
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.
是否有解决此问题的设置?还是我错过了什么?这本书说这应该有用。
答案 0 :(得分:1)
我对这本书不熟悉,但是从assert_select
docs看来,它正在按预期工作:
如果第一个参数是一个元素,则以深度优先的顺序选择从(包括)该元素及其所有子级开始的所有匹配元素。 (强调我的)
由于“首页”位于单独的ul
父级中,因此我不确定,但我怀疑找不到正确的li
。试试这个:
assert_select 'ul' do
assert_select 'li', '1 \u00d7 Programming Ruby 1.9'
end
答案 1 :(得分:0)
我在代码中找到了问题
import gp
import inspect
print(gp.__file__)
print(inspect.getfile(gp))
需要
assert_select 'li', '1 \u00d7 Programming Ruby 1.9'
为了正确显示\ u00d7,必须用双引号引起来。
答案 2 :(得分:0)
这里是新手错误。
用双引号替换单引号可解决此问题。
在此处添加一些原因:
单引号不能直接保存/打印转义序列,而双引号可以。 \u00d7
需要转义以匹配测试结果
https://rubyinrails.com/2014/01/03/ruby-difference-between-single-and-double-quotes/
如果选择至少个元素,则asset_select断言为true。如果未找到任何元素,则第一个找到的元素将被打印在错误消息中。这就是为什么我们将<Home>
视为实际结果。
https://apidock.com/rails/ActionController/Assertions/SelectorAssertions/assert_select