TOPシステム開発> コントローラのテスト
Ruby on Rails入門
Ruby on Rails入門

第4回:Railsでテストをしてみよう
著者:アスタリクス  大西 正太   2006/6/14
前のページ  1  2  3  4
コントローラのテスト

   続いてコントローラのテストを行いましょう。
コントローラの雛形ファイルを作成

   モデルの場合と同様に、scaffoldした時点ですでに「RAILS_ROOT/test/functional」配下にcontacts_controller_test.rbが生成されています。


コントローラのテストを作成

   contacts_controller_test.rbを開きます。自動的に生成されているテストコードに続いて下記のコードを記述します。

def test_update_action
   post :update , :id => 1, :contact => {:email => 'update@example.com'}
   contact1 = Contact.find(1)
   assert_equal 'update@example.com', contact1.email
   assert_redirected_to 'contacts/show/1'
end

   2行目のpostはWebブラウザからのPOSTリクエストをエミュレートするメソッドで、updateアクションへ指定したパラメータでアクセスした場合と同様の処理が行われます。

   3、4行目ではモデルのテストと同様のassert_equalを用いた検証のほかに、assert_redirected_toを用いてリダイレクト先のパスの検証も行っています。Railsでは他にも表3に示すような便利な検証メソッドが揃えられており、必要に応じて利用することができます。

assert_tag レスポンスのHTMLに指定したタグが存在するかを検証
assert_template レンダリングされるテンプレートファイルを検証
assert_redirected_to リダイレクト先を検証

表3:Railsで提供される検証メソッド(一部)

   また検証メソッドはRailsのAPI Documentationで確認することができます。

Module: Test::Unit::Assertions(英語)
http://api.rubyonrails.com/classes/Test/Unit/Assertions.html


コントローラのテストを実行

   コントローラのテストの実行は、モデルのテストと同様です。「モデルのテストを実行」を参考に行ってください。


コントローラをまたがるテスト

   Rails 1.1から、コントローラをまたがるテストを実行する機能も付属しています。テストの作成、実施の方法は基本的にこれまで述べたモデルやコントローラのテストと同様です。詳細は下記のURLを参照してください。



Rakeを用いたテスト実行

   本連載ではRadRailsを用いて視覚的にテストを実行してきましたが、RailsではRAILS_ROOTフォルダでrakeコマンドを実行することで、テストの実行を行うことができます。先ほども述べましたが、コマンドベースのrakeにはcronやatなどで定期的に起動できるという利点があります。またrakeを使った場合スキーマ情報のインポートもセットで行われます。

実行内容 入力コマンド
モデルのテスト rake test:units
コントローラのテスト rake test:functionals
コントローラをまたぐテスト rake test:integration

表4:rakeを用いたテスト実行


デバッガ

   RadRailsにはデバッガが付属しており、アプリケーションの変数を確認しながらステップ実行することができます。Railsにも元々breakpointというコマンドベースのデバッガスクリプトが付属していますが、ユーザビリティという意味ではIDEのRadRailsに軍配が上がります。

   しかしデバッガはRadRails 0.6.3で正式リリースされた機能ではないため、動作が不安定な面もあります。0.7での正式リリース(予定)が待たれます。


終わりに

   今回はRailsによるテストの概観をご紹介してきました。スクリプト言語はコンパイル時の文法・型チェックがありませんが、Railsではテストを繰り返し行うことで品質と生産性を確保することができます。

   さて次回はRails上でAjaxを作ってみましょう。

前のページ  1  2  3  4


株式会社アスタリクス  大西 正太氏
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第4回:Railsでテストをしてみよう
  テストの自動化
  サンプルにテストを適用する
  モデルのテストを作成
コントローラのテスト