Ruby on rails 方法的rspec共享示例
我有这个控制器规范文件Ruby on rails 方法的rspec共享示例,ruby-on-rails,rspec,Ruby On Rails,Rspec,我有这个控制器规范文件 describe BriefNotesController do render_views before(:all) do @customer=Factory(:customer) @project=Factory(:project_started, :owner => @customer) end context 'get :new' do it 'should redirect to login page for n
describe BriefNotesController do
render_views
before(:all) do
@customer=Factory(:customer)
@project=Factory(:project_started, :owner => @customer)
end
context 'get :new' do
it 'should redirect to login page for not signed in users' do
get :new, :project_id => @project.id
response.should new_user_session_path
end
end
context 'get :create' do
it 'should redirect to login page for not signed in users' do
post :create, {:project_id => @project.to_param, :brief_note => Factory.attributes_for(:brief_note, :project_id => @project.id)}
response.should redirect_to new_user_session_path
end
end
在这些测试中,我对每个操作重复相同的身份验证测试,因此我想用dry-way重新编码。我尝试用
方法的共享\u示例\u重新编码此测试,但我没有处理它。类似的方法可以工作
shared_examples_for 'redirects to login page if not signed in' do
context 'get :new' do
it 'should redirect to login page for not signed in users' do
get :new, :project_id => resource.id
response.should redirect_to new_user_session_path
end
end
context 'get :create' do
it 'should redirect to login page for not signed in users' do
post :create, resource_params
response.should redirect_to new_user_session_path
end
end
end
您可以这样使用它:
describe BriefNoteController do
let(:customer) { Factory(:customer) }
let(:project) { Factory(:project_started, :owner => customer) }
let(:resource) { project }
let(:resource_params) do
{
:project_id => project.to_param,
:brief_note => Factory.attributes_for(:brief_note, :project_id => project.id)
}
end
it_behaves_like 'redirects to login page if not signed in'
end