2012-07-30 7 views
7

Tengo instalado django-nose 1.0 como corredor de prueba para un proyecto de Django 1.3.1. Estoy siguiendo las instrucciones on the pypi page con respecto a los modelos solo de prueba.Django-nose no crea modelos de solo prueba durante las ejecuciones de prueba

Aquí es mi settings.py config TestRunner:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

me he encontrado pruebas durante varios meses usando este TestRunner sin problema. Ahora estoy tratando de probar una clase abstracta, y estoy usando un modelo de solo prueba, pero la prueba específica que he escrito arroja un error.

De acuerdo con la documentación, solo necesito incluir la clase de prueba en uno de los archivos que se importan durante la prueba. Tengo las pruebas ubicadas en una carpeta de "pruebas" y divididas en varios archivos de prueba más pequeños. Aquí es mis pruebas/model_tests.py (modelos y aplicación renombrados intencionadamente por motivos de trabajo):

from django.tests import TestCase 
from myapp.models import AbstractFoo 

class Foo(AbstractFoo): 
    pass 


class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 

Estoy recibiendo un error en la primera línea de la instalación:

DatabaseError: relation "tests_foo" does not exist 
LINE 1: INSERT INTO "tests_foo" ("name", "description", "display... 

y si pongo un punto de quiebre en la prueba e inspeccionar la base de datos, la tabla 'tests_foo' (o cualquier tabla con 'foo' en el nombre) no existe.

¿Alguna idea sobre por qué no se carga el modelo de solo prueba?

+0

estoy recibiendo el mismo error con 1,5 en este momento. ¿Cómo resolviste esto, por favor? –

Respuesta

0

Sí, parece que esto sigue siendo un problema. Vi con Django == == 1.6 y 1.3 django-nariz

Una solución es poner todos los modelos de __init__.py en su carpeta tests/

tema relevante en GitHub: django-nose/issues/77

0

lo necesario para crear el modelo en la base de datos de prueba, para hacer esto necesita generar migración o crear tabla en la base de datos manualmente. Puede revisar mi aplicación de la segunda variante https://github.com/erm0l0v/django-fake-model

Este código debe funcionar como se esperaba:

from django.tests import TestCase 
from myapp.models import AbstractFoo 

from django_fake_model import models as f 


class Foo(f.FakeModel, AbstractFoo): 
    pass 


@Foo.fake_me 
class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 
Cuestiones relacionadas