2011-09-19 38 views
5

Estoy intentando crear pruebas para recursos anidados en Rails. La definición de la ruta relevante es:Prueba de recursos anidados con RSpec

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

Usando RSpec y factory_girl, estoy tratando de empezar con las pruebas con, por ejemplo

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 

Estas solicitudes siempre resultan en

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

Para la vida de mí no puedo encontrar una manera de especificar una ruta a un recurso anidado con RSpec. ¿Estoy haciendo algo fundamentalmente malo aquí?

Actualización: La parte pertinente de rutas rastrillo es:

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

puede publicar qué rutas de rastreo | las comunidades grep te dan? – corroded

+0

Actualizado a la pregunta original. – Sami

+2

Esa es una identificación de aspecto extraño. ¿Puedes mostrar lo que está pasando en la definición de fábrica? – zetetic

Respuesta

3

veo que está de paso del content.community.id como: community_id y ese objeto se parece a un documento que se identifica mongo con un BSON :: ObjectId. Intente usar to_param en su lugar de la siguiente manera:

get :show, :community_id => content.community.to_param, :id => content.to_param