2011-04-01 20 views
10

Tengo un problema al ejecutar todas mis especificaciones.Rack :: Prueba resultante en ActiveRecord :: AssociationTypeMismatch

 
    ActiveRecord::AssociationTypeMismatch: 
     Affiliate(#2154746360) expected, got Affiliate(#2199508660) 

Parecería que mis modelos se cargan dos veces.

He aislado el problema de introducir el requisito de Rack :: Test para definir un método de "aplicación".

require 'rack/test' 
include Rack::Test::Methods 

# app method is needed for rack-test 
def app 
    Rails.application 
end 

Si comento hacia fuera Rails.application las especificaciones de mi bastidor no funcionan, pero todas mis otras especificaciones funcionan bien. El uso de Rails.application en el método "aplicación" introduce el error anterior.

Si ejecuto mis especificaciones de forma individual, todo funciona. Estoy precargando mi entorno con Spork y creo que los modelos son cargados primero por Spork y luego son redefinidos cuando se llama a Rails.application en mi método de "aplicación".

¿Alguna idea sobre cómo puedo resolver este problema? No estoy seguro de si hay otra manera de configurar mi aplicación Rails en el método de "aplicación".

+0

Nos hemos encontrado con el mismo problema, y ​​no hemos tenido éxito en sugerirlo. ¿Has tenido algo de suerte? –

+0

Parece que hay alguna acción en el grupo de Google factory_girl sobre este tema: http://groups.google.com/group/factory_girl/browse_thread/thread/daa24556d90c31fc –

+0

Michael, no he tenido suerte hasta el momento. Acabo de evitar ejecutar las especificaciones ofensivas con el resto de mis especificaciones. Es un dolor. –

Respuesta

0

Ya no tengo más este problema. Actualicé mis gemas. Rails se actualizó de 3.0.5 a 3.0.7 y supongo que puede haber sido la actualización de la gema que solucionó mi problema. De cualquier manera con las versiones más nuevas de gemas, mi problema es fijo.

1

a partir del código fuente para Rails.application:

# File railties/lib/rails.rb, line 34 
def application 
    @@application ||= nil 
end 

Esto significa que Rails.application devuelve el mismo objeto cada vez. Tal vez este es el problema: ejecutar varias pruebas en los mismos enfrentamientos de la aplicación Rails con objetos.

Some tutorials pruebas de conjunto de esta manera:

def app 
    Rails::Application 
end 

Mientras others lo hacen así:

def app 
    ActionController::Dispatcher.new 
end 

Ambos de los cuales crean nuevo objeto para cada llamada a app.

EDIT: Apenas observado en los registros que ActionController::Dispatcher.new está marcado como obsoleto.

+0

Gracias, pero después de actualizar mis gemas las cosas parecen haber solucionado su salida. –

Cuestiones relacionadas