2011-12-28 6 views
1

私はAuthLogicを使用してRailsアプリケーションを持っており、test doubleを使ってcurrent_userにステップインしています。多くのコントローラ仕様で繰り返し使用されるcurrent_userには、制限された状態のセットがあります。多くのコントローラ仕様に使用されているテストダブルを再利用する方法

この例から続けて、各コンテキストで同様のダブルセットアップを持つコントローラを想像してみてください。繰り返しコードがたくさんあることがわかります。これにDRYを適用するための好ましい方法は何ですか?

controller_1_spec.rb

require 'spec_helper' 

describe Controller1 do 

    describe "GET 'index'" do 

    context "when user has state A" do 
     before(:each) do 
     user = double("User") 
     user.stub(:state).and_return("A") 
     user_session = double("UserSession") 
     user_session.stub(:user).and_return(user) 
     UserSession.stub(:find).and_return(user_session) 
     end 

     it "should test something for users with State A" do 
     get :index 
     end 

     it "should test something else for users with State A" do 
     get :index 
     end 
    end 

    context "when user has state B" do 
     before(:each) do 
     user = double("User") 
     user.stub(:state).and_return("B") 
     user_session = double("UserSession") 
     user_session.stub(:user).and_return(user) 
     UserSession.stub(:find).and_return(user_session) 
     end 

     it "should test something for users with State B" do 
     get :index 
     end 

     it "should test something else for users with State B" do 
     get :index 
     end 
    end 
    end 
end 

はちょうどspec_helperするヘルパーメソッドを追加するための最良の方法ですかのような、よりベストプラクティス何かがあるのでしょうか?

答えて

1

セットアップコードをspec_helper.rbまたはspec/support/{something} .rbファイルで定義されているヘルパーメソッドに移動します。

def userInAStateWithSession 
    user = double("User") 
    user.stub(:state).and_return("A") 
    user_session = double("UserSession") 
    user_session.stub(:user).and_return(user) 
    UserSession.stub(:find).and_return(user_session) 
    return user 
end 

-

describe Controller1 do 

    describe "GET 'index'" do 

    context "when user has state A" do 
     before(:each) do 
     user = userInAStateWithSession 
     end 

     ... 
関連する問題