Rieles de pruebas funcionales, error de enrutamiento
-
23-09-2019 - |
Pregunta
Soy nuevo en pruebas, y estoy teniendo algunas dificultades para ejecutar una prueba funcional.
Tengo una messages_controller, y un user_controller aquí.en las rutas, he definido que los usuarios de los recursos has_many mensaje de los recursos.
Ahora estoy tratando de ejecutar una prueba sencilla en la que los mensajes de controlador:
def test_index
get :index, { :user_id => 1 }
assert_template 'index'
end
Pero un error de rails, que él no puede encontrar una ruta a los mensajes.No quiero incluir una ruta a los mensajes sólo a causa de las pruebas.¿Cómo puedo saber la prueba de que él debe de acceso de las /los usuarios/mensajes de url?
el total de las rutas.rb:
ActionController::Routing::Routes.draw do |map|
map.login 'login', :controller => :user_sessions, :action => :new
map.logout 'logout', :controller => :user_sessions, :action => :destroy
map.signin 'signin', :controller => :users, :action => :new
map.connect 'search/:action/:word', :controller => :search
map.connect 'search/:word', :controller => :search, :action => :index
map.resources :forums do |forums|
forums.resources :forum_posts, :collection => {:preview => :post }, :as => :posts do |post|
post.resources :forum_posts, :as => :reply
post.resources :reports
end
end
map.resources :newsitems, :as => :news do |news|
news.resources :comments do |comment|
comment.resources :reports
end
end
map.resource :user_sessions
map.resources :users,
:as => :profiles,
:controller => :profiles,
:has_many => [ :messages ]
map.resource :profiles
map.resource :me,
:controller => :me,
:has_many => [ :messages ]
map.resources :comments, :has_many => [ :reports ]
map.resources :forum_posts, :has_many => [ :reports ]
map.resources :reports
map.home '/', :controller => :home
map.root :controller => :home
map.namespace :admin do |admin|
admin.namespace :forum do |forum|
forum.resources :categories
forum.resources :posts
forum.resources :forums
forum.root :controller => :home
end
admin.resources :notices
admin.resources :users
admin.workflow 'workflow/:action', :controller => :workflow
admin.resources :newsitems
admin.resources :reports
admin.resources :comments
admin.root :controller => :home
end
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
ACTUALIZACIÓN
Me he dado cuenta de que cada prueba funcional un error.Incluso el simpliests como noticia.Yo no tengo ni idea de por qué.
Solución
He recreado el escenario en un espacio en blanco carriles de aplicación con el código de enrutamiento y la prueba y que ha especificado, y funcionó sin problemas, como debe ser. Voy a pegar mi código de controlador de aquí, ya que es la única parte que queda fuera:
class MessagesController < ApplicationController
def index
@messages = User.find(params[:user_id]).messages
end
end
Si el suyo está haciendo básicamente lo mismo, entonces un problema de enrutamiento podría ser causado por un conflicto en el archivo de enrutamiento, que es lo que sospecho que podría ser el caso. Se puede publicar eso? Para su información, escribí un artículo de Prueba de las rutas , y eso sería una muy buena idea, ya que atraparía enrutamiento errores a tiempo, antes de que interfieran con los controladores.
De todos modos, si se puede publicar sus rutas puedo echarle un vistazo.
ACTUALIZACIÓN: Después de mirar sus rutas, hay un par de conflictos. Usted puede tener los mensajes como un sub-recursos de más de un otro recurso, pero en el controlador sus mensajes vas a tener que dar cuenta de la posibilidad ya sea de un params [: me_id] o [params: profile_id]. Parece que los dos están muy por debajo del modelo de usuario, por lo que puede ser tan simple como:
@user = User.find(params[:me_id] || params[:profile_id])
y usted probablemente querrá abstracta que fuera en un método que llama con before_filter
.
El otro problema es que tiene dos rutas superpuestas perfiles, y no estoy seguro de por qué. No creo que se trata de un error de encaminamiento en la prueba, ya que las pruebas de derivación del motor de enrutamiento de todos modos. Creo que es un error en la vista del índice, ya que probablemente contiene enlaces a los mensajes con direcciones URL con formato incorrecto. Si usted tiene un enlace a un mensaje, por ejemplo, y usted tiene un objeto @profile, entonces usted tendrá que llamar a ellos de esta manera:
<%= link_to message.name, profile_message_path(@profile, @message) %>
Sin embargo, si usted está utilizando caminos no anidados como message_path(@message)
, se producirá un error porque no hay rutas de mensajes no anidados.
Otros consejos
Era un problema en mi "viaje" de la gema.Hicieron las rutas más estrictos en el viaje 1.0.4 que solo se muestran en la prueba del "medio ambiente".Es bueno para el "desarrollo" y la "producción".
** Asegúrese de que está utilizando exactamente los mismos parámetros tal como se declara en rutas **
Agregar:
get :index, :locale => "en"
o en tu Gemfile de la actualización:
gem 'journey', '1.0.3'
La segunda solución es una solución para el momento.Idealmente, usted debe ser la prueba de tus rutas de todos exacta params.Viaje 1.0.4 es mucho más estrictas