2011-09-19 15 views
5

Próbuję utworzyć testy dla zagnieżdżonych zasobów w Railsach. Odpowiednia definicja trasy to:Testowanie zagnieżdżonych zasobów za pomocą narzędzia RSpec

resources :communities do 
    resources :contents, :type => 'Content' 
end 

Używam RSpec i factory_girl, próbuję zacząć od testowania za pomocą np.

describe ContentsController do 
    it 'should display a content item under a community' do 
    content = FactoryGirl.create(:content) 
    get :show, :community_id => content.community.id, :id => content.id 
    end 
end 

Te wnioski zawsze skutkować

Failure/Error: get :show, :community_id => content.community.id, :id => content.id 
ActionController::RoutingError: 
    No route matches {:community_id=>BSON::ObjectId('4e7773c6ac54c3d1ad000002'), 
    :id=>BSON::ObjectId('4e7773c6ac54c3d1ad000001'), :controller=>"contents", 
    :action=>"show"} 

Dla życia mnie nie mogę znaleźć sposób, aby określić trasę do zagnieżdżonych zasobu z RSpec. Czy robię coś fundamentalnie nie tak?

Aktualizacja: Istotna część trasy po kasę to:

community_contents GET /communities/:community_id/contents(.:format)    {:action=>"index", :controller=>"contents"} 
         POST /communities/:community_id/contents(.:format)    {:action=>"create", :controller=>"contents"} 
new_community_content GET /communities/:community_id/contents/new(.:format)   {:action=>"new", :controller=>"contents"} 
edit_community_content GET /communities/:community_id/contents/:id/edit(.:format) {:action=>"edit", :controller=>"contents"} 
    community_content GET /communities/:community_id/contents/:id(.:format)   {:action=>"show", :controller=>"contents"} 
         PUT /communities/:community_id/contents/:id(.:format)   {:action=>"update", :controller=>"contents"} 
         DELETE /communities/:community_id/contents/:id(.:format)   {:action=>"destroy", :controller=>"contents"} 
+0

Czy możesz podać, jakie są trasy rake'u | grep społeczności daje ci? – corroded

+0

Zaktualizowano na oryginalne pytanie. – Sami

+2

To dziwacznie wyglądające id. Czy możesz pokazać, co się dzieje w definicji fabryki? – zetetic

Odpowiedz

3

widzę, że jesteś przechodzącą content.community.id jako: community_id i że obiekt wygląda dokumentu Mongo, która jest identyfikowana z BSON :: ObjectId. Spróbuj użyć to_param zamiast tego:

get :show, :community_id => content.community.to_param, :id => content.to_param 
Powiązane problemy