• ブログ
  • ふぉとす
  • キーワード
  • ブックマーク
  • 写真
  • ログイン

kaeruspoon

« Rails2.0PRでRspecを走らせる | このためだけにPS3が欲しい »
  • Rspecでコントローラのspecファイルを書く 2007-11-10 00:00:00

     Rspecを超いまさらながらやっています。Rspecで一番よくわからないのがMock
    とstubで、いまでも両者の違いがよくわかっていないし、mockはあるオブジェクトのフリをする仮想的なオブジェクトで、stubはあるインターフェースを偽装するボックスなのかなあとも考えたりしていますが、はっきりと理解していません。
     今、趣味でとあるwebアプリを作っていて、そのログイン処理の部分の仕様をRspecで書いてみました。

      before(:each) do
        @user = mock("user")
      end
    

    まずはUserモデルのインスタンスのフリをするmockオブジェクトをbeforeで作っておきます。Rspecの例などを見てみると、そのmockオブジェクトやPersonクラスにとstubを定義したりしていますが、今回のログイン仕様ではUserモデルのインスタンスは作らないので用意していません。
     で、ログインが成功する部分の仕様を書きます。

      it "should log in" do
        User.should_receive(:authenticate).with("abe@mail.com", "abe_pass").and_return(@user)
        post "login", {:email => "abe@mail.com", :password => "abe_pass"}
        response.should be_redirect
        response.should redirect_to(index_url)
        assigns[:current_user].should == @user
      end
    

     まずはUserモデルにstubを定義します。それぞれのitブロックの中で、それに関係するstubを宣言するのが、Rspecのやりかたみたいです。before部では全体に関係するようなstubだけを定義するらしい。しかも、そのときはshould_receiveメソッドではなくstub!メソッドを使って、検証はさせないようにするようです(こんな理解でいいのかな?)。
     これで、正当なメールアドレスとパスワードをPOSTメソッドで送ると、indexへリダイレクトされてログイン状態になるという仕様が定義されました。あとはこれを通るようにコードを書くだけです。
     ログインに失敗する部分の仕様は下記のとおり。

      it "shouldn't log in" do
        User.should_receive(:authenticate).with("itou@mail.com", "invalid_pass").and_return(nil)
        post "login", {:email => "itou@mail.com", :password => "invalid_pass"}
        response.should be_success
        response.should render_template("account/login")
        assigns[:current_user].should be_nil
      end
    
    Commentコメント(0) Pageリンク元(717) Append 275
« Rails2.0PRでRspecを走らせる | このためだけにPS3が欲しい »

プロフィール

おおいしつかさ

Amazon商品の一覧

人気の記事ベスト10

  • 1.apache+mod_proxy_balancer+mongrelでRailsを動かす方法
  • 2.Perlでevalを使ってみる
  • 3.バージョン管理をsubversionからgitに移行してみた
  • 4.restful_authenticationを使ってみた
  • 5.tokyobikeのドロップハンドル化
  • 6.ubuntu8.04でデュアルディスプレイを使う
  • 7.MySQLコンファレンス2008 2日目に参加してきました。
  • 8.URLなど、長い英字を折り返して表示する方法
  • 9.RailsとPostfixで受信メールを処理する方法
  • 10.Software RAID1 を centOS で正しく使う

コメント

  • lesbian forced facesit(Software RAID1 を centOS で正しく使う)
  • cyokodog(IEではscript要素にinnerHTMLが使えない)
  • ユル(カッコよくなければ意味がない)
  • 武石(本当のヒヨドリ侍)
  • ユル(空の境界 (講談社ノベルス): 奈須 きのこ: 本)
  • おおいしつかさ(アメリカ全州制覇の旅2008 第1話 前編(1/8)‐ニコニコ動画(秋))
  • 萩原寿夫(アメリカ全州制覇の旅2008 第1話 前編(1/8)‐ニコニコ動画(秋))

過去の記事

2006年
12月
2007年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2008年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2009年
1月 2月 3月 4月 5月 6月 7月

キーワード一覧

ActionScript AmazonResources Erlang git javascript kaeruspoon merb milook MiyazakiResistance NSR Objective-C Rails Ruby Ruby on Rails speedpetal subversion Thin Thinkpad tokyobike TRPG ubuntu VAIO VAIO typeZ Waves Xen ぐりぐり カンタロー スノボー ドトール ドライブ バイク プログラミング ユルさん 執筆 日本酒 模型 真中洋嗣 自転車

Youtube

ニコニコ動画