コントローラの機能テスト

機能テストの作成方針

  1. リクエストに対して,期待通りのレスポンスが返ってくるかを検証する。
  2. publicな全アクションを網羅する。
  3. コントローラとビューがテスト対象。基本的なビューのテストは書かなくても良い。

具体的なテストの記述方法

  • リクエスト生成(get/postなど)は、ActionController::TestProcessモジュール内のメソッドを利用する。

参照:http://api.rubyonrails.org/classes/ActionController/TestProcess.html

    • file_uploadのテスト⇒fixture_file_upload(path, mime_type = nil, binary = false)を用いると良い
  • 検証は,ActionController::Assertionsモジュール内のメソッドを利用する。

参照:http://api.rubyonrails.org/classes/ActionController/Assertions.html

  • 手順
    • (1)リクエストを生成・実行する。
      • まず、HTTPパラメータやセッションデータを準備。
      • それらのパラメータを使って、アクションへのHTTPリクエストをシミュレートする。
        • get :アクション名, パラメータ、セッション
        • post :アクション名, パラメータ, セッション
        • xhr :リクエストメソッド, :アクション名, パラメータ, セッション
    • (2)レスポンスを検証する。
      • HTTP status… assert_response :success もしくは :redirect
      • redirect先… assert_redirected_to :controller => コントローラ名, :action => アクション名
      • DOM要素の存在判定… assert_tag :tag => "span", :attributes => { :id => "hoge" }
      • DOM要素の非存在判定… assert_no_tag :tag => "span", :attributes => { :id => "hoge" }
    • (3)コントローラの事後状態を検証する。
      • ビューテンプレートに渡されるインスタンス変数(@hoge)が期待通りの値かどうかをassertで検証。⇒インスタンス変数は assigns( 変数名 ) で取ってこれる。
    • (4)必要に応じて、DBの事後状態を検証する。
      • モデルの参照系メソッドを呼び出して、コントローラのアクションが期待通りのDB操作を行なったかどうかをassertで検証。ただし,コントローラ層のテストに,モデル層のメソッド呼び出しを混在させてよいかどうかは十分考えること。
                                                                                          • -

何か間違っていることやアドバイス等々があれば、よろしくお願いします。
最後までお読み頂きまして、ありがとうございました。