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 に減りました。終わりが見えてきましたね。
修正内容は前回とほぼ同じであったため読み物としてはまったく面白くありませんが、本日はここまで。
