Вопрос по ruby-on-rails – Тестирование «Post create» с помощью Rspec

6

Я пытаюсь протестировать & quot; Опубликовать создание & quot; действие с Rspec. Код выглядит следующим образом:

<code>   def valid_attributes
     {
    :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first,
        :name => 'USA',
        :description => 'USA Flight',
        :zipcodes => ''),
    :price => '100.00',
    :class => 'first',

     }
   end

   def valid_session
     {}
   end

   before(:each) do
       @request.env["devise.mapping"] = Devise.mappings[:admin]
       admin = FactoryGirl.create(:admin)
       sign_in admin                           
      end

describe "POST create" do
     describe "with valid params" do
       it "creates a new Flymgr::Rule" do
         expect {
           post :create, {:Flymgr_rule => valid_attributes}
         }.to change(Flymgr::Rule, :count).by(1)
       end
</code>

Одним из обязательных атрибутов для формы является «зона», это раскрывающийся список, и параметры раскрывающегося списка создаются в другой форме. Я не знаю, как создать форму записи с помощью Rspec. Как видите, я пытался вызвать метод из другого контроллераFlymgr::Zone.new, Я не думаю, что это работает, и это нарушает мой тест.

Кто-нибудь может посоветовать лучший способ сделать это? Возможно, мне следует использовать FactoryGirl для создания зоны и записи правил?

Ваш Ответ

2   ответа
3

Какруководство указывает на то:

# Returns a hash of attributes that can be used to build a User instance
attrs = FactoryGirl.attributes_for(:user)
5

Ваш хэш параметра запроса имеет объект в качестве значения: zone, когда вы публикуете его, он будет просто "to_s" -ed, что маловероятно, что вы хотите.

В общем, лучшая практика - использовать фабричную девушку для создания ваших объектов и использовать стратегию attribute_for для параметризации ее атрибутов для запроса post: Как правильно проверить & создать; создать? действия контроллера?

Ваш вопрос предполагает, что ассоциация является принадлежащим вам, поэтому вам просто нужно опубликовать идентификатор. Имейте в виду, что в настоящее время FactoryGirl не создает никаких атрибутов для ассоциаций. Если ваше фабричное определение для правила заботится о связи зоны, вы можете использовать этот обходной путь:

FactoryGirl.build(:flymgr_rule).attributes

также включить zone_id, но тогда вам нужно исключить нежелательные параметры. (& quot; id & quot ;, создан__ & quot ;, & quot; updated_at & quot; и т. д.).

Таким образом, вам лучше явно указать хэш-информацию параметров для зоны так, как вы видите ее в действительном почтовом запросе.

Прочитайте эту ветку об атрибутах и ассоциациях Factorygirl: https://github.com/thoughtbot/factory_girl/issues/359

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