2010-08-26 8 views
6

Estoy probando mi aplicación y me encuentro con un problema y no estoy seguro de por qué. Estoy cargando accesorios para mis pruebas y los accesorios tienen claves foráneas que dependen el uno del otro. Deben cargarse en un orden determinado o no funcionará.¿Las luminarias Django se cargan en un orden incorrecto durante la prueba?

Los accesorios Estoy cargando son:

["test_company_data", "test_rate_index", 'test_rate_description']

datos de la empresa es la primera. test_rate_index tiene una clave externa para la empresa, y test_rate_description tiene una clave externa para un modelo declarado en test_rate_index. (como un lado, diferentes pruebas necesitan accesorios diferentes por lo que no estoy empujando todo en uno)

Si utilizo el procedimiento estándar de django para cargar pruebas, las pruebas no se cargan en el orden correcto.

 
class TestPackages(test.TestCase): 
    fixtures = ["test_company_data", "test_rate_index", "test_rate_description",] 

me sale el mensaje

DoesNotExist: RateDescription matching query does not exist.

Pero si invierto el orden de mis accesorios (que no tiene sentido) funciona:

fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]

Django's documentation establece que los accesorios se cargan en el orden están declarados, pero este no parece ser el caso.

Como solución alternativa, en lugar de utilizar de

 call_command('loaddata', *fixtures, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
             })

estoy usando una función diferente en el método de configuración que carga los accesorios de uno a la vez Django.

def load_fixtures(fixtures): 
    for fixture in fixtures: 
     call_command('loaddata', fixture, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
              })

¿Hay algo que estoy haciendo mal o no entender que está causando mis accesorios no deben ser cargados en el orden correcto cuando se intenta utilizar el método estándar?

+0

¿Puedes publicar cómo son los modelos de tus accesorios? –

Respuesta

1

La documentación de Django indica que los dispositivos se cargan en el orden en que se declaran, pero este no parece ser el caso.

Esto es ciertamente extraño. Los dispositivos se cargan en el orden correcto cuando probé uno de mis proyectos (Django 1.2.1, Python 2.6.2, Postgresql 8.3.11).

Esto es lo que haría para solucionar los problemas.

DoesNotExist: la consulta de coincidencia de RateDescription no existe.

  1. ¿Está recibiendo este error al cargar un accesorio o al ejecutar una prueba? ¿Puedes encontrar el accesorio/código que está planteando esto? Aumenta la verbosidad si es necesario.

  2. ¿Puedes intentar disparar un comando loaddata desde la línea de comando? Llámalo tres veces, pasando el nombre de un accesorio para cada llamada en la secuencia esperada adecuada. Y mira si los accesorios se cargan.

  3. Sé que probablemente ya habrás hecho esto, pero ¿puedes asegurarte de que el primer y el segundo accesorio no contengan ningún dato de RateDescription?

+2

Hola Manoj, gracias por sus sugerencias de depuración. Cuando me encontré con la línea de comandos, he descubierto que las instalaciones estaban bombardeando porque "CREATION_TIME" no puede ser nulo". Después de añadir el CREATION_TIME a los accesorios que parecen funcionar como me esperaba. Sin embargo, todavía no tiene sentido para mí por qué se instalarían aparentemente bien en un orden, pero no en otro. Todas mis pruebas pasaron y las pruebas se basan en que los datos estén allí. – Aaron

Cuestiones relacionadas