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é.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top