rails attr_accessible rspec check
Когда я хочу проверить, является ли атрибут / недоступен с RSpec, я делаю это так
class Foo
attr_accesible :something_else
end
describe Foo do
it('author should not be accessible') {lambda{described_class.new(:author=>true)}.should raise_error ActiveModel::MassAssignmentSecurity::Error}
it('something_else should be accessible'){lambda{described_class.new(:something_else=>true)}.should_not raise_error ActiveModel::MassAssignmentSecurity::Error}
end
Есть ли лучший способ сделать это?
...Спасибо
1 ответ
Решение
Именно так проходят тесты доступности атрибутов в руководстве по Rails, что, на мой взгляд, довольно хорошо. Так что, в вашем случае, тестовый код может быть немного изменен, чтобы читать как:
describe Foo do
describe "accessible attributes" do
it "should not allow access to author" do
expect do
Foo.new(author: true)
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
it "should allow access to something_else" do
expect do
Foo.new(something_else: true)
end.to_not raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
end
end
Если это не то, что вы искали, можете ли вы дать нам лучшее представление о том, какое решение вы ищете, когда спросите, есть ли "лучший путь"?
редактировать
Возможно, вас заинтересуют средства сравнения Shoulda ActiveModel, которые будут очищать код до одной строки за тест. Что-то вроде:
it { should_not allow_mass_assignment_of(:author) }
it { should allow_mass_assignment_of(:something_else) }