Pytanie w sprawie ruby-on-rails, testing, rspec, factory-bot, rspec-rails – Testowanie „Post create” za pomocą Rspec

6

Próbuję przetestować akcję „Utwórz po utworzeniu” za pomocą Rspec. Kod jest następujący:

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

Jednym z wymaganych atrybutów formularza jest „strefa”, jest to lista rozwijana, a opcje listy rozwijanej są tworzone w innym formularzu. Nie wiem, jak utworzyć wpis formularza za pomocą Rspec. Jak widać, próbowałem wywołać metodę z innego kontroleraFlymgr::Zone.new. Nie sądzę, żeby to działało i łamie mój test.

Czy ktoś może doradzić, w jaki sposób najlepiej to zrobić? Być może powinienem użyć FactoryGirl do utworzenia strefy i reguły?

Twoja odpowiedź

2   odpowiedź
3

Jakoprzewodnik zwraca uwagę:

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

zone, gdy go opublikujesz, będzie po prostu 'to_s'-ed', co jest mało prawdopodobne, co chcesz.

Zasadniczo najlepszą praktyką jest używanie dziewczyny fabrycznej do budowania obiektów i używanie strategii attributes_for do parametryzowania jej atrybutów dla żądania posta:Jaki jest właściwy sposób testowania „tworzenia” działań kontrolera?

Twoje pytanie sugeruje, że skojarzenie jest przynależne, więc po prostu musisz opublikować identyfikator. Pamiętaj, że obecnie FactoryGirl nie tworzy żadnych atrybutów dla skojarzeń. Jeśli definicja fabryczna reguły dotyczy powiązania strefy, możesz użyć tego obejścia:

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

aby dołączyć także zone_id, ale wtedy musisz wykluczyć niechciane parametry. („id”, „created_at”, „updated_at” itp.).

Być może lepiej będzie jawnie wstawić informację hash params dla strefy w sposób, w jaki widzisz to w poprawnym żądaniu postu.

Przeczytaj ten wątek na temat atrybutów i skojarzeń factorygirl:https://github.com/ thoughttbot/factory_girl/issues/359

Powiązane pytania