2011-07-16 9 views
6

Mam 2 kontrolerów, które stworzyłem za pomocą generatora prowadnic szyn. Chciałem, żeby być zagnieżdżone w folderze o nazwie „demo” i tak prowadziłJak przetestować kontrolery z trasami zagnieżdżonymi za pomocą Rspec?

rails g scaffold demo/flows 
rails g scaffold demo/nodes 

Potem zdecydowałem się gniazdo węzłów wewnętrznych przepływów i zmienił złożyć moje trasy tak:

namespace :demo do 
    resources :flows do 
    resources :nodes 
    end 
end 

Ale ta zmiana zaowocowało testami rspec dla węzłów zerwania z ActionController :: Routing errors.

15) Demo::NodesController DELETE destroy redirects to the demo_nodes list 
    Failure/Error: delete :destroy, :id => "1" 
    ActionController::RoutingError: 
     No route matches {:id=>"1", :controller=>"demo/nodes", :action=>"destroy"} 

Problem polega na tym, że rspec patrzy na złą trasę. Powinien szukać "demo/flow/1/nodes". Potrzebny jest również modelowy model przepływu, ale nie jestem pewien, jak to zapewnić. Oto mój przykładowy kod z wygenerowanego pliku rspec:

def mock_node(stubs={}) 
    @mock_node ||= mock_model(Demo::Node, stubs).as_null_object 
    end 

    describe "GET index" do 
    it "assigns all demo_nodes as @demo_nodes" do 
     Demo::Node.stub(:all) { [mock_node] } 
     get :index 
     assigns(:demo_nodes).should eq([mock_node]) 
    end 
    end 

Czy ktoś może mi pomóc zrozumieć, w jaki sposób muszę dostarczyć model przepływu?

Odpowiedz

15

Masz tu dwa różne pytania, więc możesz je podzielić, ponieważ twoje drugie pytanie nie ma nic wspólnego z tytułem tego postu. Polecam przy użyciu FactoryGirl do tworzenia modeli mock https://github.com/thoughtbot/factory_girl

Twój błąd trasa jest pochodzących z faktu, że zagnieżdżonych trasy wymagają id po każdym z nich tak:

/demo/flows/:flow_id/nodes/:id 

Po wykonaniu usuwać na obiekt, musisz podać ID przepływu, inaczej nie będzie wiedział, o której trasie mówisz.

delete :destroy, :id => "1", :flow_id => "1" 

W przyszłości, to najprostszy sposób, by sprawdzić, czego oczekuje, to uruchomienie rake routes i porównać wyjście na tej trasie z czego params są przechodzącą w.

demo_flow_node /demo/flows/:flow_id/nodes/:id(.:format) {:action=>"destroy", :controller=>"demo/flows"} 
Powiązane problemy