Frage an ruby-on-rails, testing, factory-bot, rspec-rails, rspec – Testen von "Post Create" mit Rspec

6

Ich versuche, eine Aktion "Post erstellen" mit Rspec zu testen. Der Code lautet wie folgt:

<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>

Eines der erforderlichen Attribute für das Formular ist eine 'Zone'. Dies ist ein Dropdown-Feld, und die Optionen für das Dropdown werden mit einem anderen Formular erstellt. Ich kann keinen Formulareintrag mit Rspec erstellen. Wie Sie sehen, habe ich versucht, eine Methode von einem anderen Controller aufzurufenFlymgr::Zone.new. Ich glaube nicht, dass das funktioniert und es meinen Test bricht.

Kann jemand einen Rat geben, wie man das am besten macht? Vielleicht sollte ich FactoryGirl verwenden, um einen Zonen- und Regeleintrag zu erstellen?

Deine Antwort

2   die antwort
3

Als dieführen weist darauf hin:

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

zone, wenn Sie es veröffentlichen, wird es nur 'to_s'-ed sein, was unwahrscheinlich ist, was Sie wollen.

Im Allgemeinen empfiehlt es sich, Factory Girl zum Erstellen Ihrer Objekte zu verwenden und die Attribute für die Strategie zu verwenden, um die Attribute für die Post-Anfrage zu parametrisieren:Was ist der richtige Weg, um die Controller-Aktionen zum Erstellen zu testen?

Ihre Frage deutet darauf hin, dass die Zuordnung eine Zugehörigkeit ist, sodass Sie nur eine ID posten müssen. Beachten Sie, dass FactoryGirl derzeit keine Attribute für die Assoziationen erstellt. Wenn Ihre Factory-Definition für die Regel die Zonenzuordnung berücksichtigt, können Sie diese Problemumgehung verwenden:

<code>FactoryGirl.build(:flymgr_rule).attributes
</code>

Um aber auch eine zone_id einzuschließen, müssen Sie die unerwünschten Parameter ausschließen. ("id", "created_at", "updated_at" usw.)

Aus diesem Grund ist es möglicherweise besser, die params-Hash-Informationen für zone so einzufügen, wie Sie sie in einer gültigen Post-Anfrage sehen.

Lies diesen Thread über Factorygirl Attribute und Assoziationen:https://github.com/thoughtbot/factory_girl/issues/359

Verwandte Fragen