繁体   English   中英

Rails 测试 assert_select 与 assert_selector

[英]Rails testing assert_select vs assert_selector

据我了解, assert_select是一种 Capybara 方法,用于测试 HTML <select>元素的 state,而assert_selector用于测试任何 HTML 元素及其内部文本的存在。

那么,为什么:

assert_select "h1", "Foobar"

工作,当h1不是<select>元素时? Rails 指南在这里似乎不一致。

你可能想要:

assert_selector "h1", text: "Foobar"

这看起来像是对术语的一些误解。

CSS选择器是用于选择要设置样式的元素的模式。 assert_select用于选择器测试(不仅用于<select>元素)。

您的问题中有链接到Rails指南。 那里

assert_select方法允许您使用简单但强大的语法查询响应的HTML元素。

assert_select有两种形式:

assert_select(selector, [equality], [message])确保通过选择器在所选元素上满足相等条件。 选择器可以是CSS选择器表达式(String)或具有替换值的表达式。

assert_select(element, selector, [equality], [message])通过从元素开始的选择器确保所有选定元素满足相等条件( Nokogiri::XML::Node or Nokogiri::XML::NodeSet实例) Nokogiri::XML::Node or Nokogiri::XML::NodeSet )及其后代。

例如,您可以使用以下命令验证响应中title元素的内容:

 assert_select 'title', "Welcome to Rails Testing Guide" 

您还可以使用嵌套的assert_select块进行更深入的调查。

在以下示例中, li.menu_item的内部assert_select在外部块选择的元素集合中运行:

 assert_select 'ul.navigation' do assert_select 'li.menu_item' end 

对于原始问题

assert_selectassert_selector与 html 标签<select>无关。 就是这样。

对于那些为了assert_selectassert_selector之间的区别而来这里的人

  • assert_select
    • rails-dom-testing gem 基于nokogiri gem 提供的断言。
    • 用于断言responce中的 DOM 元素。
    • 因此,旨在进行集成测试。
  • assert_selector
    • Capybara gem 提供的断言。
    • 用于断言给定的选择器在页面上或当前节点的后代。 此外,它将等待选择器出现在页面上,如果不存在且不会超时。
    • 因此,旨在进行系统测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM