0

我正在使用一个简单的assert_select 运行我在rails 中创建的测试,它应该根据我的固定装置填充5 个div。但是每次它失败时说找到 0 个元素,而预期是 5 个。是否可以看到测试所基于的输出?

以下是给我带来麻烦的具体测试:

require 'test_helper'

class PostsControllerTest < ActionController::TestCase
  test "should get index" do
    get :index
    assert_response :success
    assert_select '.contentBox', minimum: 5
  end
end

和错误:

Finished tests in 0.403847s, 2.4762 tests/s, 4.9524 assertions/s.

  1) Failure:
test_should_get_index(PostsControllerTest) [/var/www/site/test/functional/posts_controller_test.rb:7]:
Expected at least 5 elements matching ".contentBox", found 0.

1 tests, 2 assertions, 1 failures, 0 errors, 0 skips
rake aborted!

应该注意的是,当从 Rails 控制台(例如 Post.new 等)手动添加所有内容时,一切正常,我可以手动检查源代码并查看是否有适当数量的项目。所以它让我相信我在测试中做错了什么。

4

1 回答 1

1

puts @response.body如果您想检查它,您应该能够使用它来打印返回的页面的正文。你也可以考虑使用 Capybara,如果你这样做了,你可以使用put page.body

您必须添加到测试中的是创建 5 个帖子。所以做类似的事情:

class PostsControllerTest < ActionController::TestCase
  test "should get index" do
    get :index
    puts @response.body #This should print what is returned from get:index
    assert_response :success
    assert_select '.contentBox', minimum: 5
  end
end

更新评论中的问题:如果您的控制器中有: @posts = Post.all

那么在你看来,你应该有类似的东西:

<% @post.all do |post| %>
  <div class="contentBox">
    Title: <%= post.title %> 
  </div>
<% end %>
于 2012-12-07T16:00:34.530 回答