Контроллер rspec ActiveModel:: ForbiddenAttributesError

Я пытаюсь проверить свой контроллер в rSpec и получаю следующую ошибку:

  1) ClientsController POST create with valid params creates a new Client
     ←[31mFailure/Error:←[0m ←[31mpost :create, {:client => valid_attributes}←[0
m
     ←[31mActiveModel::ForbiddenAttributesError←[0m:
       ←[31mActiveModel::ForbiddenAttributesError←[0m
←[36m     # ./app/controllers/clients_controller.rb:27:in `create'←[0m

Я предполагаю, что это как-то связано с сильными параметрами. Но я понятия не имею, как установить сильные параметры в моем тестовом контроллере rspec (потому что все это описывает вместо методов (def))

Однако я использую let(:valid_attributes) { FactoryGirl.build(:client).attributes }.

Ошибка запрещенных атрибутов является чем-то из сильных параметров? Если так; Как мне установить сильные параметры в моем контроллере. Если не; Что вызывает эту проблему?

Вот Фабрика, которую я использую со своим :valid_attributes:

FactoryGirl.define do
  factory :client do
    name { 'Willem' }
    birthdate { '1990-10-10' }
    background { '#ff0000'}
  end
end

Одна из неудач:

  1) ClientsController PUT update with valid params updates the requested client

     ←[31mFailure/Error:←[0m ←[31mput :update, {:id => client.to_param, :client
=> valid_attributes}←[0m
       ←[31m#<Client:0x6c8e140> received :update with unexpected arguments←[0m
       ←[31m  expected: ({"id"=>nil, "name"=>"Willem", "avatar"=>nil, "birthdate
"=>Wed, 10 Oct 1990, "background"=>"#ff0000", "group_id"=>nil, "created_at"=>nil
, "updated_at"=>nil})←[0m
       ←[31m       got: ({"name"=>"Willem", "avatar"=>nil, "birthdate"=>"1990-10
-10", "background"=>"#ff0000", "group_id"=>nil})←[0m
←[36m     # ./app/controllers/clients_controller.rb:44:in `block in update'←[0m
←[36m     # ./app/controllers/clients_controller.rb:43:in `update'←[0m
←[36m     # ./spec/controllers/clients_controller_spec.rb:112:in `block (4 level
s) in <top (required)>'←[0m

Описание приводит к:

  it "updates the requested client" do
    client = Client.create! valid_attributes
    Client.any_instance.should_receive(:update).with(valid_attributes)
    put :update, {:id => client.to_param, :client => valid_attributes}
  end

person CaptainCarl    schedule 21.10.2013    source источник


Ответы (1)


Вам не нужно задавать строгие параметры в RSpec, просто обязательно отправьте правильный объект, например:

сообщение new_client_path, клиент: FactoryGirl.build(:client).attributes

Иначе, что говорит журнал сервера? Должна быть ошибка о том, что вызывает эту проблему. Не могли бы вы предоставить его копию здесь?

person Loed    schedule 21.10.2013
comment
Лоед! Я обновил свой пост, добавив больше информации о фабрике, ошибке и описании, которое является частью ошибки. - person CaptainCarl; 21.10.2013