【发布时间】:2020-11-19 10:10:59
【问题描述】:
我希望运行一个测试*来检查是否存在这样的东西:
<tr>
<td> name </td> <td> date </td>
</tr>
代码,如下:
assert_select "tr" do
assert_select "td", name
assert_select "td", date
end
看起来有道理,但不正确,例如下面的例子(这不是所需的匹配)也会通过:
<tr>
<td> name </td>
</tr>
<tr>
<td> date </td>
</tr>
我很难从assert_select 的文档中了解如何解决这个问题。
谢谢
丹尼尔
- 在默认的 Rails 集成测试中(我相信这意味着 MiniTest)
【问题讨论】:
-
CSS 确实有一个兄弟选择器
td+td,但它没有基于文本节点的选择器。除非您可以添加类或数据属性,否则您最好的选择可能是使用assert_select 'td', exp,其中exp是匹配节点的正则表达式。您也可以使用css_select选择 td 元素并遍历它们。如果它的行为类似于可枚举,您应该能够使用with_index与集合中的前一个项目进行比较。 -
感谢@max 正确方向的指点。对于信息,兄弟选择器不会返回第一个 td(在此上下文中),仅返回后续兄弟。 css_select 返回类 Nokogiri::XML::NodeSet 的东西,它响应 each_with_index。
标签: ruby-on-rails testing minitest