2015-04-22 46 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)