如何在集成测试中使用assert_select选择一个css类?

时间:2017-04-13 21:34:51

标签: ruby-on-rails ruby integration-testing minitest

我正在构建我的集成测试,我需要确保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类resources-count的HTML标记。

感谢阅读。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

只需使用

assert_select '.resources-count', "1"

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