ruby-on-rails - 如何在 Rails 中断言选择一个类?

标签 ruby-on-rails ruby ruby-on-rails-4

我正在为我的项目使用 Rails 4.2,但我不知道如何检查特定类的缺失。我尝试使用 assert_select 'p.class_name', falseassert_select '.class_name', false。它给出了同样的错误:

ArgumentError: ArgumentError: wrong number of arguments (given 3, expected 1) 

还有我做的时候

puts assert_select 'p', :attributes => {:class => 'class-name'}

它正在选择所有不应完成的 p 标签。

此外,当我通过执行以下操作检查类中是否存在文本时:

assert_select 'p.class_name', 'Hello_world'

它给出了同样的错误。

但后来我试着去做

assert_select 'p', 'Hello-world'

它工作正常。

最后,如何在 rails 4.2 中断言选择一个类?

最佳答案

对于 HTML 上任意复杂的断言,请使用我的 assert_xpath .第一步是隔离你的 <p> 的容器。 .我们假设它在 <article> 中, 所以使用 //article 的 XPath .然后调用refute_xpath XPath 为 p[ contains(@class, "class-name") ] .像这样把它们放在一起:

get :action

assert_xpath '//article' do
  refute_xpath 'p[ contains(@class, "class-name") ]'
  assert_xpath 'p[ "Hello World" = text() ]'
end

XPath 符号可以像关系数据库查询一样复杂和精细,不像 assert_select 的 CSS 选择器。用途。

将我的方法粘贴到您的 test_helper.rb 中文件:

class ActiveSupport::TestCase

  def assert_xml(xml)
    @xdoc = Nokogiri::XML(xml, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
    refute_nil @xdoc
    return @xdoc
  end

  def assert_html(html=nil)
    html ||= response.body
    @xdoc = Nokogiri::HTML(html, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
    refute_nil @xdoc
    return @xdoc
  end

  def assert_xpath(path, replacements={}, &block)
    @xdoc ||= nil  #  Avoid a dumb warning
    @xdoc or assert_html  #  Because assert_html snags response.body for us
    element = @xdoc.at_xpath(path, nil, replacements)

    unless element
      complaint = "Element expected in:\n`#{@xdoc}`\nat xpath:\n`#{path}`"
      replacements.any? and complaint += "\nwith: " + replacements.pretty_inspect
      raise Minitest::Assertion, complaint
    end

    if block
      begin
        waz_xdoc = @xdoc
        @xdoc = element
        block.call(element)
      ensure
        @xdoc = waz_xdoc
      end
    end

    return element
  end

  def refute_xpath(path, replacements={}, &block)
    @xdoc ||= nil  #  Avoid a dumb warning
    @xdoc or assert_html  #  Because assert_html snags @response.body for us
    element = @xdoc.at_xpath(path, nil, replacements)

    if element
      complaint = "Element not expected in:\n`#{@xdoc}`\nat xpath:\n`#{path}`"
      replacements.any? and complaint += "\nwith: " + replacements.pretty_inspect
      raise Minitest::Assertion, complaint
    end
  end

end

关于ruby-on-rails - 如何在 Rails 中断言选择一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568810/

相关文章:

ruby-on-rails - 滚动并获取对资源具有特定访问权限的用户列表

ruby-on-rails - 如何将一个数组的数组合并成一个数组?

ruby-on-rails - Rails 5.2:ActiveRecord::RecordInvalid(声称用户名已被占用,但事实并非如此)

mysql - 没有创建数据库

ruby-on-rails - 如何轻松解析对 rest-client API 调用的响应?

javascript - 如何获取函数元素中的值

ruby-on-rails - 如何在 Rails 应用程序中覆盖 gem 生成器模板

ruby-on-rails - 如何测试 Rails ERB 模板的代码覆盖率?

函数的 Ruby C 扩展

c# - 为什么类结构语言中的构造函数通常被认为是线程安全的?