В настоящее время я использую rspec с cancan. Я понял, что засорение контрольных примеров контроля разрешений во всех файлах спецификаций моих контроллеров чрезвычайно грязно. По сути, почти все мои файлы спецификаций контроллера имеют что-то вроде:
describe "failure" do
it { get :new }
it { get :edit, :id => @deal }
it { get :update, :id => @deal }
it { get :destroy, :id => @deal }
after(:each) do
response.should_not be_success
response.should redirect_to(root_path)
flash[:error].should == "Permission denied."
end
end
end
В моей системе 4 роли, и это определенно делает организацию гораздо более сложной задачей.
Поскольку все эти тесты связаны с контролем разрешений / ACL, я попытался поместить их все в один файл rspec / models /ility_spec.rb
прямо сейчас, моя способность_спек выглядит следующим образом:
describe "cancan" do
it "failure" do
@ability.should_not be_able_to(:all, Factory(:purchase))
@ability.should_not be_able_to(:all, Factory(:user))
@ability.should_not be_able_to(:all, Visit)
end
end
Я получаю следующую ошибку:
6) Ability consumers deals failure
Failure/Error: it { get :destroy, :id => @deal }
NoMethodError:
undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_2::Nested_2:0x007fd73209a270>
# ./spec/models/ability_spec.rb:46:in `block (5 levels) in <top (required)>'
Я знаю, что я не должен помещать контроллер get / post в этот файл. Есть ли способ сделать это ради упрощения тестирования моих тестов, связанных с разрешениями?