• ブログ
  • 写真
  • キーワード
  • ブックマーク
  • ログイン

Title

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

     Rspecを超いまさらながらやっています。Rspecで一番よくわからないのがMoc
    k と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リンク元(205) Append 275
  • 51h42b5qf1lApache辞典 (DESKTOP REFERENCE)
    メディア: 単行本
    51clhphwq8lイナイ×イナイ (講談社ノベルス モF- 38)
    メディア: 新書
« Rails2.0PRでRspecを走らせる | このためだけにPS3が欲しい »

Profile

おおいしつかさ

Service

  • いまどこ
  • どこでもお気に入り
  • milook

Amazon

41kgu11gj9l 41dmqixwh0l 41egso5zutl 5120ewhghfl 41p9jjfbtdl 51gswm08hsl 61igp6v-bml 41vqzlcvyvl 51bxmgksdgl

Youtube

Default Default Default Default Default Default Default Default Default

Niconico

Smile?i=3091016 Smile?i=3365211 Smile?i=163980 Smile?i=2516314 Smile?i=2415577 Smile?i=2351828 Smile?i=191298 Smile?i=1447270 Smile?i=1755586

Ranking

  • 1.apache+mod_proxy_balancer+mongrelでRailsを動かす方法
  • 2.Perlでevalを使ってみる
  • 3.URLなど、長い英字を折り返して表示する方法
  • 4.tokyobikeのドロップハンドル化
  • 5.ubuntu8.04でデュアルディスプレイを使う
  • 6.バージョン管理をsubversionからgitに移行してみた
  • 7.Amazonの商品を手軽に扱えるプラグイン、AmazonResourcesをつくりました
  • 8.Rspecでコントローラのspecファイルを書く
  • 9.webサーバ Thin を使ってみる
  • 10.RailsとPostfixで受信メールを処理する方法

Archive

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

Comments

  • おおいしつかさ(今朝のObjective-Cの勉強)
  • おおいしつかさ(ダメな一日)
  • シュン(ダメな一日)
  • 武石(ダメな一日)
  • babie(今朝のObjective-Cの勉強)
  • ユル(tokyobikeで江ノ島にいってきた)
  • おおいしつかさ(いま飲み会)

keyword

ActionScript AmazonResources git javascript kaeruspoon milook NSR Objective-C Rails Ruby Ruby on Rails subversion Thin tokyobike ubuntu VAIO Waves ぐりぐり カンタロー スノボー ドトール ドライブ バイク プログラミング ユルさん 執筆 模型 真中洋嗣 自転車
あわせて読みたいブログパーツ
Pageリンク元(12151)