2012-12-07 187 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