blog_entries コントローラの修正
2008/12/20
前回は、members コントローラの機能テストを通しました。
今日は、blog_entries コントローラです。
> ruby -Itest test/functional/blog_entries_controller_test.rb (中略) 19 tests, 54 assertions, 1 failures, 2 errors
ざっとメッセージを見たところ、members コントローラの時とよく似ています。多分、スムーズに修正は終わることでしょう。
app/controllers/blog_entries_controller.rb
の index アクション
# ブログのトップ def index page = (params[:page] || 1).to_i if params[:blog_id] @blog = Blog.find(params[:blog_id]) @blog_entries, count = @blog.recent_entries(ENTRIES_PER_PAGE, page) else @blog_entries, count = BlogEntry.recent_entries(ENTRIES_PER_PAGE, page) end @blog_entry_pages = Paginator.new(self, count, ENTRIES_PER_PAGE, page) end
を、次のように修正します。
# ブログのトップ def index page = (params[:page] || 1).to_i if params[:blog_id] @blog = Blog.find(params[:blog_id]) @blog_entries = @blog.blog_entries.all(:order => 'blog_date desc, created_at desc, id'). paginate(:page => page, :per_page => ENTRIES_PER_PAGE) else @blog_entries = BlogEntry.all(:order => 'blog_date desc, created_at desc, id'). paginate(:page => page, :per_page => ENTRIES_PER_PAGE) end end
また、app/views/blog_entries/index.rhtml
を次のように修正します。
<% if @blog_entry_pages.page_count > 1 -%> <div class="pagination"> <%= my_pagination_links @blog_entry_pages %> </div> <% end -%>
<%= will_paginate @blog_entries, :previous_label => '前へ', :next_label => '次へ', :inner_window => 2 %>
test/functional/blog_entries_test.rb
の test_index1 メソッド
# indexアクション def test_index1 get :index assert_response :success assert_kind_of Array, assigns(:blog_entries) paginator = assigns(:blog_entry_pages) assert paginator.respond_to?(:current) assert_equal 20.quo(BlogEntriesController::ENTRIES_PER_PAGE).ceil, paginator.page_count assert_kind_of Array, assigns(:authors) assert assigns(:authors).all? {|a| a.blog and (a.blog.blog_entries.length > 0) } assert_equal 2, assigns(:authors).length end
を、次のように修正します。
# indexアクション def test_index1 get :index assert_response :success assert_kind_of Array, assigns(:blog_entries) assert_kind_of Array, assigns(:authors) assert assigns(:authors).all? {|a| a.blog and (a.blog.blog_entries.length > 0) } assert_equal 2, assigns(:authors).length end
同様に、test_index2 メソッド
# indexアクション(:blog_idあり) def test_index2 taro = members(:taro) get :index, { :blog_id => taro.blog.id } assert_response :success assert_kind_of Array, assigns(:blog_entries) assert assigns(:blog_entries).all? {|e| e.blog.author.id == taro.id } paginator = assigns(:blog_entry_pages) assert paginator.respond_to?(:current) assert paginator.current.first? assert_equal 10.quo(BlogEntriesController::ENTRIES_PER_PAGE).ceil, paginator.page_count end
を、次のように修正します。
# indexアクション(:blog_idあり) def test_index2 taro = members(:taro) get :index, { :blog_id => taro.blog.id } assert_response :success assert_kind_of Array, assigns(:blog_entries) assert assigns(:blog_entries).all? {|e| e.blog.author.id == taro.id } end
テストメソッド test_routing は、前回同様、URL のパターンが Rails 1.2.4 で変更されたことによるものです。
assert_generates '/blog_entries/99;edit', { :controller => 'blog_entries', :action => 'edit', :id => 99 }
を、次のように修正してください。
assert_generates '/blog_entries/99/edit', { :controller => 'blog_entries', :action => 'edit', :id => 99 }
(これも前回と同じですが)最後に、blog_entries_controller_test.rb の 2-4 行の余分なコード
require 'blog_entries_controller' # Re-raise errors caught by the controller. class BlogEntriesController; def rescue_action(e) raise e end; end
を削除して、警告が出ないようにしておきましょう。
test:functionals タスクを実行すると…
92 tests, 310 assertions, 2 failures, 4 errors
失敗の数が 3 から 2 に、エラーの数が 6 から 4 に減りました。終わりが見えてきましたね。
修正内容は前回とほぼ同じであったため読み物としてはまったく面白くありませんが、本日はここまで。