3rdRailによるRailsプログラミング入門

第7回 Controllerクラスの実装と機能テスト(後編)

富田 陽介
Banana Systems株式会社

2009/8/21

FavoritesControllerのアクションメソッド名の決定

 HitokotosControllerの開発イテレーションと同様、FavoritesControllerを作成していきましょう。

 まずは、先に整理したHitokotosControllerへのリクエストを確認しながら、それぞれのリクエストを割り当てるアクションメソッド名を決定していきます。

 今回、FavoritesControllerに処理させたいリクエストは、扱うModelクラスが違いこそすれ、基本的にはHitokotosControllerで実装したリクエストに含まれるものと同様です。ですので、アクションメソッド名も、HitokotosControllerの例にならって、以下のようにすることとします。

5. 「ひとこと」の横にある「気に入った」リンクを押すことにより、お気に入り登録画面を要求する
  ⇒FavoritesController#new
6. お気に入り登録画面で、ユーザー名を選択し、お気に入り登録処理を要求する
  ⇒FavoritesController#create

 ここで、5で割り当てるnewアクションは、先ほど作成したHitokotosController#indexのビューから呼び出されるものです。

 6のお気に入り登録処理では、お気に入りに登録する「ユーザー」と、「ひとこと」が両方指定される必要があります。今回は、これらの識別子として、user_id、hitokoto_idを引数として渡す必要があることも念頭に置いておきましょう。

 続いて、機能テストの実装に入っていきます。

FavoritesController機能テストを書き起こす

 FavoritesControllerはスカフォルドを使用して作成していないので、機能テストは一から書いていく必要があります。今回は、HitokotosControllerの機能テストを参考に、以下のような機能テストコードを実装することとします。

●favorites_controller_test.rb
require 'test_helper'
class FavoritesControllerTest < ActionController::TestCase
  test "newへのhitokoto_idパラメータを伴うGETリクエストが成功し、hitokoto変数にお気に入り登録する「ひとこと」が、users変数にユーザーのリストが割り当てられている" do
    get :new, :hitokoto_id => 1
    assert_response :success
    assert_not_nil assigns(:hitokoto)
    assert_not_nil assigns(:users)
  end

  test "createへのPOSTリクエストにより、Favoriteのレコード数が1増加し、「ひとこと」の一覧画面に遷移する" do
    assert_difference('Favorite.count', 1) do
      post :create, :favorite => { :user_id => 1 }, :hitokoto_id => 1
    end 
    assert_redirected_to hitokotos_path
  end 
end

 上記のとおり、new、createそれぞれのアクションメソッドに対する機能テストを実装しました。早速、テストを実行してみましょう。FavoritesControllerは、現時点では何も実装がなされていませんので、下図のような該当のアクションメソッドが見当たらないといったエラーが発生するはずです。

test_createへのPOSTリクエストにより、Favoriteのレコード数が1増加し、「ひとこと」の一覧画面に遷移する(FavoritesControllerTest)
No action responded to create. Actions: exception, exception=, and rescue_action_without_handler
:

test_newへのGETリクエストが成功する(FavoritesControllerTest)
No action responded to new. Actions: exception, exception=, and rescue_action_without_handler
:

 では、この機能テストが通るように本番コードを実装していきましょう。

FavoritesControllerの本番コード実装

 ここでは、機能テストで規定したnew、createメソッドを実装していきます。HitokotosControllerの実装済みコードも参考にしながら、実装していきましょう。実装したfavorites_controller.rbは以下の通りです。

●favorites_controller.rb
class FavoritesController < ApplicationController
  # GET /favorites/new
  def new
    @favorite = Favorite.new
    @hitokoto = Hitokoto.find(params[:hitokoto_id])
    @favorite.hitokoto_id = @hitokoto.id
    @users = User.find(:all)

    respond_to do |format|
      format.html # new.html.erb
    end
  end

  # POST /favorites
  def create
    @favorite = Favorite.new(params[:favorite])
    @hitokoto = Hitokoto.find(params[:hitokoto_id])
    @favorite.hitokoto_id = @hitokoto.id
    @users = User.find(:all)

    respond_to do |format|
      if @favorite.save
        flash[:notice] = 'お気に入りを作成しました'
        format.html { redirect_to(hitokotos_path) }
      else
        format.html { render :action => "new" }
      end
    end
  end
end
prev
3/4
next

Index
Controllerクラスの実装と機能テスト(後編)
  Page1
HitokotosControllerの本番コード実装
  Page2
HitokotosControllerが使用するビューの実装
Page3
FavoritesControllerのアクションメソッド名の決定
FavoritesController機能テストを書き起こす
FavoritesControllerの本番コード実装
  Page4
newメソッドに対応するビューファイルの準備
FavoritesController機能テスト実行確認
FavoritesControllerが使用するビューの実装

index 3rdRailによるRailsプログラミング入門

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間