How to test attr_accessible fields in RSpec

不想你离开。 提交于 2019-11-30 03:03:06

You can check if the attribute is on #accessible_attributes list

RSpec::Matchers.define :be_accessible do |attribute|
  match do |response|
    response.class.accessible_attributes.include?(attribute)
  end
  description { "be accessible :#{attribute}" }
  failure_message_for_should { ":#{attribute} should be accessible" }
  failure_message_for_should_not { ":#{attribute} should not be accessible" }
end

I was looking for something similar and then I was told about the shoulda-matcher allow_mass_assigment_of. That ended up working for me without creating a custom matcher.

it { should allow_mass_assignment_of :some_field }
it { should_not allow_mass_assignment_of :field_name }

Hope this helps someone else.

If for some reason RSpec is tripping up on juicedM3's answer above like mine was you can do something like this:

specify { expect { Model.new(unaccessible_attr: value) }.to raise_error(ActiveModel::MassAssignmentSecurity::Error) }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!