2012-12-07 223 views
0

我正在运行一个测试,我已经在rails中创建了一个简单的assert_select,它应该根据我的灯具填充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! 

应当注意的是,当手动添加了从铁轨控制台(如Post.new,等等)一切工作正常,我可以手动检查来源,并看到有适当数量的项目。所以它让我相信我在测试中做了错误的事情。

回答

1

如果您想要检查它,您应该可以使用puts @response.body来打印返回页面的主体。你也可以考虑使用水豚,如果你可以使用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 %> 
+0

应该' puts @ response.body'被放置在测试中?如果是这样,我似乎没有得到任何输出。 – bswinnerton

+0

是的,它应该在测试中,并且应该在向控制器发出请求之后,以便响应可用。这也可以帮助http://guides.rubyonrails.org/testing.html#instance-variables-available。此外,如果它不太透露,看到测试可能会有所帮助。 –

+0

我已更新该帖子以包含我收到的测试和错误。 – bswinnerton