Как разместить вложенные атрибуты в тестировании интеграции RSpec? - PullRequest
1 голос
/ 10 января 2012

Я пишу интеграционные тесты RSpec, когда преобразую свой код для спагетти в accepts_nested_attributes_for. У меня есть такой фрагмент кода:

# file: spec/requests/wizard_spec.rb
describe 'POST /wizard with address' do
  before(:each) do
    @premise_attributes = {
      "address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA", 
    }
  end
  it 'should succeed' do
    post :create, "wizard" => { "premise_attributes" => @premise_attributes }
    response.status.should be(200)
  end
end

Конечно, это не с:

 Failure/Error: post :create, "wizard" => { "premise_attributes" => @premise_attributes }
 ArgumentError:
   bad argument(expected URI object or URI string)

Существует ли метод, который преобразует хэши вложенных атрибутов в формат POST?

(Связанный, но менее важный: где документ post документирован или определен? Я хотел бы посмотреть, что он действительно принимает в качестве аргументов.)

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вместо post :create попробуйте использовать post "/wizard" или вложить свои спецификации в блок describe WizardController do; end.Обычно вы можете использовать синтаксис method :action, только если вы находитесь внутри блока описания для данного контроллера.

0 голосов
/ 16 декабря 2012

Я обнаружил это, пытаясь исправить мою проблему, пытаясь проверить put.Мой метод post работает, хотя, возможно, я могу помочь вам, если он вам все еще нужен.Я думаю, что ваша проблема в том, что вы пытаетесь обновить свои атрибуты, как если бы это была переменная скалярного типа, но вложенные атрибуты действительно похожи на массив.Обычно Rails называет их «0», «1» и т. Д., Но я не уверен, что это имеет значение, если они уникальны.Попробуйте:

@premise_attributes = {
  "0" => {"address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA"}
}

(Кстати, у меня проблема в том, что мои спецификации update не работают, потому что они говорят, что мой адрес не уникален, чтобы позаимствовать ваш пример.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...