2012-05-11 9 views
6

Próbuję przetestować działanie "Utwórz post" za pomocą Rspec. Kod jest w następujący sposób:Testowanie "Utwórz post" za pomocą Rspec

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 

Jednym z wymaganych atrybutów postaci jest „strefa”, jest to pole rozwijane i opcje na liście rozwijanej są tworzone z innej formie. Nie wiem, jak utworzyć wpis formularza za pomocą Rspec. Jak widać, próbowałem wywołać metodę z innego kontrolera Flymgr::Zone.new. Nie sądzę, że to działa i to jest mój test.

Czy ktoś może doradzić, jak najlepiej to zrobić? Być może powinienem używać FactoryGirl do stworzenia strefy i wejścia do reguł?

Odpowiedz

5

Twój parametr żądania hash ma obiekt jako wartość: zone, kiedy będziesz publikować, będzie to po prostu "to_s", co jest mało prawdopodobne, czego chcesz.

Ogólnie najlepszą praktyką jest stosowanie Dziewczyna z fabryki budować swoje przedmioty i używać strategię attributes_for parameterize jego atrybuty dla żądania post: What is the proper way to test 'create' controller actions?

Twoje pytanie sugeruje, że stowarzyszenie jest belong_to więc wystarczy wysłać wiadomość. Należy pamiętać, że obecnie FactoryGirl nie tworzy żadnych atrybutów dla skojarzeń. Jeśli definicja fabrycznym reguły zajmuje stowarzyszenia strefy, można użyć tego rozwiązania:

FactoryGirl.build(:flymgr_rule).attributes 

również zawierać id_strefy ale wtedy trzeba wykluczyć niepożądane params. ("id", "created_at", "updated_at", itp.).

Możesz lepiej wstawić informacje o mieszaniu params dla strefy w taki sposób, w jaki widzisz je w prawidłowym żądaniu.

Przeczytaj ten wątek na atrybutach factorygirl i stowarzyszeń: https://github.com/thoughtbot/factory_girl/issues/359

3

Jako guide zaznacza:

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