2015-04-22 76 views
0

我想測試每個控制器操作中的用戶是否已登錄。共享上下文的Rspec參數

幹什麼最好的做法是讓我可以爲我的所有行爲重複它,即獲得,展示,新建,編輯。

它將需要通過get:index,get:new等,並傳入顯示和編輯參數。

這裏的非幹版只有一個動作:

RSpec.shared_context 'when user is not logged in' do 

before do 
    sign_out :user 
    end 

    it 'GET#index redirects to sign in page' do 
     get :index  
     expect(response).to redirect_to new_user_session_path 
    end 

我想每個控制器動作做到這一點,而無需複製/粘貼代碼。

我希望這是明確的!提前致謝!

回答

1

我不知道確切,但我認爲這應該工作:

RSpec.shared_examples 'when user is not logged in' do |actions| 
    before { sign_out :user } 

    actions.each do |action| 
    it "GET##{action} redirects to sign in page" do 
     get action 
     expect(response).to redirect_to new_user_session_path 
    end 
    end 
end 

it_should_behave_like 'when user is not logged in', %i(new index)