Pregunta

Estoy tratando de averiguar por qué esto no funciona.

ejemplo de permiten tres modelos, el usuario, Foo y Bar. Para que una barra que se crea el usuario primero debe crear y validar un objeto foo.

Class User #snip!
has_many :foos
has_many :bars

Class Foo #snip!
belongs_to :user
has_many :bars

Class Bar #snip!
belongs_to :user
belongs_to :foo

Estoy tratando de conseguir un trabajo de prueba funcional en la que si los intentos de usuario para hacer una nueva barra sin tener un foo válida, se redirecciona a la "nueva" acción por un Foo.

No he tenido ningún problema con el escenario redireccionamiento. Sin embargo, cuando intento configurar un usuario con un objeto Foo válida y tratar de conseguir la "nueva" acción por una barra, todavía se le redirecciona a la "nueva" acción del controlador de Foo. Todavía no reconocer que el usuario tiene una Foo.

Aquí está mi controlador:

 class BarsControllerTest < ActionController::TestCase
  setup :activate_authlogic
  def setup
    @request.env['HTTPS'] = nil
    @user = Factory.build(:user)
    @foo = Factory.build(:foo, :user => @user)
  end
   test "should get new when user has a valid foo" do
     @request.env['HTTPS'] = 'on'
     UserSession.create(@user)
     get :new
     assert_response :success
  end

Esta es la función de redirección que tengo en mi controlador de aplicación que se llama en mi controlador de barra:

  def foo_required
    if current_user && @current_user.foos.valid.empty? && @current_user.foos.empty?
    flash[:notice] = "You must have a verified foo in order to create a Bar!"
    redirect_to new_foo_path
    elsif current_user && @current_user.foos.valid.empty?
    flash[:notice] = "You must verify your foos in order to create a Bar!"
    redirect_to foos_path
    end
 end

Aquí está la fábrica de Foo:

Factory.define :foo do |f|
   #attributes
   f.valid true
   f.association :user
end

En su lugar me redirigen a " https://test.host:80/foos/new" el controlador no reconocer que el usuario tiene un Foo ...

La sesión es válida para que éste parece ser un problema en la fábrica, pero no estoy seguro de lo que es.

¿Fue útil?

Solución

Estoy asumiendo que esto es factory_girl. Que está llamando Factory.build que no hace nada para guardar la base de datos, para que nunca tenga el valor de clave externa necesaria para su asociación. Cambiar aquellos a Factory.create y debería ver una diferencia.

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