Как проверить поля attr_accessible в RSpec

Итак, мы настраивали attr_accessible и attr_protected для многих полей в нашем приложении Rails 3.2. На данный момент мы действительно не проверяем, защищены ли эти поля.

Итак, я решил погуглить несколько ответов и наткнулся на следующее решение:

RSpec::Matchers.define :be_accessible do |attribute|
  match do |response|
    response.send("#{attribute}=", :foo)
    response.send("#{attribute}").eql? :foo
  end
  description { "be accessible :#{attribute}" }
  failure_message_for_should { ":#{attribute} should be accessible" }
  failure_message_for_should_not { ":#{attribute} should not be accessible" }
end

Но это решение только проверяет, отвечает ли метод. Что мне нужно, так это способ проверить, что атрибуты можно и нельзя назначать массово. Мне искренне нравится синтаксис.

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

Есть ли у кого-нибудь лучшее решение этой проблемы?

23
задан shingara 16 February 2012 в 08:45
поделиться

2 ответа

Я искал что-то похожее, а затем мне рассказали о методе musta-matcher allow_mass_assigment_of. В итоге это сработало для меня без создания собственного сопоставителя.

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

Надеюсь, это поможет кому-то еще.

28
ответ дан 29 November 2019 в 01:09
поделиться

Если по какой-то причине RSpec запускает ответ выше juicedM3, как у меня, вы можете сделать что-то вроде этого:

specify { expect { Model.new(unaccessible_attr: value) }.to raise_error(ActiveModel::MassAssignmentSecurity::Error) }
1
ответ дан 29 November 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: