controllerのテストの書き方

controllerのテストから他のcontrollerを呼び出すには?

scaffoldが吐き出したテストの雛形からcontrollerを呼び出す際には以下のように記述します。*1

  post :login, :login => { :user => 'pastaonly', :password => 'password' }

第一引数がaction名、そして第二引数のハッシュがparametersになります。

上記記述にはcontrollerの指定がありません。また、postにはcontrollerを指定することはできません。
実はcontrollerの指定はまったく別の場所で行なわれているのです。
scaffoldが自動生成したコードを眺めると、その冒頭に以下のような記述があります。

  def setup
    @controller = UsersController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
  end

怪しい、@controllerが非常に怪しい。そして、やはり怪しい奴が犯人でした。

postメソッドで呼ばれるcontrollerはこのインスタンス変数が指定しています。

ですので、とあるテストの中から他のcontrollerが呼びたいなと思ったときは

  def test_logout
    @controller = PublicController.new
    post :login
    @controller = UsersController.new
    post :logout
  end

のような記述をすればOKです。

*1:HTTP Request Methodの[get,post,put,delete,head]の5つ内、postを例に記述します

Ruby本を購入しました

いつもGoogle先生でごまかしていた、Rubyに対する基礎知識。
そろそろ限界となってまいりました。
というわけで、いよいよRuby本を購入です。


さてしかし、どれが良いのかわからないので、
kikainekoさんに勧めていただいたものをまずは購入。
http://www.amazon.co.jp/exec/obidos/ASIN/4894714531/249-9546798-5041101


こやつはAmazonさんなので月曜には届くことでしょう。



さて、もう一冊、こちら。
http://www.amazon.co.jp/exec/obidos/ASIN/4873110238/


天下のオライリー本。
むっ、在庫がない。。。


仕方なくBookStore談に取り寄せの依頼を。
一週間程度で届くそうな。

Railsペアプロに見せかけた、CSS作成がメインのペアプロ
CSSへの知識、及びRailsの開発手順への理解が乏しく、右往左往なマウス捌き。

これではよくないと想い、Railsの開発手順を簡単にまとめてみる。

                                                                                  • -
  • テーブル作成
  • ganerate module
  • ganerate contoller

 +併せてrhtmlも作成
(新規ならば)

  • layout.rhtml作成・修正

 +:contoller,:action,CSSの修正
 +逐次CSS自体も作成・修正
 +Contoroller内で「layout 'layout'」と指定できる

  • 内包されるrthmlを作成・修正
  • partialの呼び先を作成
  • rhtmlから呼ばれるメソッドを作成
                                                                                  • -

この後、http://rails.homelinux.org/チュートリアルを試行。
Rubyの基本文法を学びつつ、2Day分は完了。
ニヤリな知識を手に入れた。それはまた別の日記で。