2011-08-12 18 views
2

私はcurrent_user.eligible_for_rewardを呼び出すヘルパーメソッドを持っていますか?私はカピバラの受け入れ仕様でその呼び出しをスタブしたいと思う。私のモデルでは、私はプレースホルダダミーメソッドを持っています。Capybara受け入れテストでコントローラ/ current_userメソッドをスタブする方法

  1. 私はCURRENT_USERをスタブ試してみましたが、それは「凍結されたオブジェクトを変更する」エラーが発生:ここ

    User.rb 
    
    def eligible_for_reward? 
        "blah" 
    end 
    

    は、私がこれまで試したものですコントローラはゼロであるためです。私はコントローラが訪問some_pathの代わりにRSpecの取得を使用する場合のみ設定されると信じています。私はsome_pathの訪問に固執する必要があります、そうでなければ私のpage.should ...ページが設定されていないため、すべて失敗します。

  2. ユーザー(ログイン/ログインを正常に実行するlogin_as(ユーザー)としてログインしてからuser.eligible_for_reward?をスタブしてみましたが、まだ動作していないようです。

この方法をスタブする良い方法はありますか?

答えて

7

アクセプタンス・スペックでのスタビングはお勧めできません。他の方法がない場合は、あなただけ行うことができます。

User.any_instance.stub!(:eligible_for_reward?).and_return(true) 

ちょうど受け入れ仕様で物事をモック/スタブすると、あなたが本当に何をテストしていないことを意味することを覚えておいてください。

+0

私は別のアプローチを採用しました。同点の合図はここでは最高ではなかった。ありがとう。 –

+1

カピバラの完全な統合テストだけではないことに注意してください。 Test :: Unit、RSpec、またはMiniTestのCapybara/Seleniumを使ってJavascriptの機能をテストし、可能な限り速く実行するためにRailsでできることをすべて外してください。また、Deviseをスタブするとき、私はそれについてもっと徹底し、スタブ:authenticate_user!何もしないようにし、コントローラーの#current_userをスタブして、偽のユーザーインスタンスを返します。そうすれば、Deviseは完全に絵の外に出ます。 –

+1

'stub!'は 'stub'に置き換えてください。 'stub!'は、そのメソッドの古いエイリアス名です。 [この電子メール](http://www.mail-archive.com/[email protected]/msg13270.html)の最後の3段落を参照してください。 – skalee

関連する問題