如何在集成测试中使 assert_select select 成为 css class?

How to make assert_select in a integration test select a css class?

我正在构建我的集成测试,我需要确保 HTML 标记具有特定整数作为值,但我收到此错误:

ReportsTest
  test_report_shows_the_right_data_for_last_30_days              ERROR (0.94s)
NoMethodError:         NoMethodError: undefined method `content_type' for nil:NilClass
            test/integration/reports_test.rb:15:in `block in <class:ReportsTest>'
            test/test_helper.rb:45:in `instance_eval'
            test/test_helper.rb:45:in `block in test'

这是我的观点:

<div class="panel panel-default report-summary">
  <div class="panel-heading">
    <h3 class="panel-title">Resumen</h3>
  </div>
  <div class="panel-body">
    <div class="row">
      <div class="col-sm-4 summary-item">
        <div class="summary-value resources-count"><%= @resources_count %></div>
        <div class="summary-label">Recursos Publicados</div>
      </div>
      <div class="col-sm-4 summary-item">
        <div class="summary-value"><%= @likes_count %></div>
        <div class="summary-label">Likes</div>
      </div>
      <div class="col-sm-4 summary-item">
        <div class="summary-value"><%= @searches_count %></div>
        <div class="summary-label">Búsquedas</div>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-4 summary-item">
        <div class="summary-value"><%= @comments_count %></div>
        <div class="summary-label">Comentarios</div>
      </div>
      <div class="col-sm-4 summary-item">
        <div class="summary-value"><%= @views_count %></div>
        <div class="summary-label">Vistas</div>
      </div>
      <div class="col-sm-4 summary-item">
        <div class="summary-value"><%= @users.count %></div>
        <div class="summary-label">Colaboradores</div>
      </div>
    </div>
  </div>
</div>

这是我的测试:

require 'test_helper'

class ReportsTest < ActionDispatch::IntegrationTest
  test 'show report without time range', subdomain: :mainco do
    sign_in users(:juan)
    visit reports_path
    assert_equal 2, page.all(".report-resources table tbody tr").count
  end

  test 'report shows the right data for last 30 days', subdomain: :mainco do
    sign_in users(:juan)
    visit reports_path
    knowledge_bases(:sales).resources.create!(user: users(:juan), 
        title: "JavaScript", type: "Discussion", created_at: 31.days.ago)

    assert_select ".resources-count" do |elements|
      elements.each do |element|
        assert_equal element, 1
      end
    end
  end

end

我的 assert_select 似乎没有正确找到具有 css class 资源计数的 HTML 标签。

感谢阅读。

如果您使用的是水豚并且需要检查元素的内容,您可以执行以下操作:

assert page.has_css?('.resources-count', text: "something")

assert_select 在这里不起作用,因为您正在创建集成测试,而不是控制器测试。


只需使用

assert_select '.resources-count', "1"

http://guides.rubyonrails.org/testing.html#testing-views