Django (1.2 beta) restablecerá las bases de datos entre cada prueba que se ejecuta, lo que significa que cada prueba se ejecuta en un DB vacío. Sin embargo, la (s) base (s) de datos no están enjuagadas. Uno de los efectos de vaciar la base de datos es que los contadores auto_increment
se restablecen.¿Puede Django purgar su (s) base (s) de datos entre cada prueba unitaria?
Considerar una prueba que toma los datos de la base de datos de clave principal:
class ChangeLogTest(django.test.TestCase):
def test_one(self):
do_something_which_creates_two_log_entries()
log = LogEntry.objects.get(id=1)
assert_log_entry_correct(log)
log = LogEntry.objects.get(id=2)
assert_log_entry_correct(log)
Esto pasará ya que sólo dos entradas de registro se haya creado. Sin embargo, si se agrega otra prueba a ChangeLogTest
y se ejecuta antes detest_one
, las claves principales de las entradas de registro ya no son 1 y 2, podrían ser 2 y 3. Ahora test_one
falla.
Esto es realmente una pregunta en dos partes:
- ¿Es posible forzar
./manage.py test
para eliminar la base de datos entre cada caso de prueba? - Dado que Django no vacía el DB entre cada prueba de manera predeterminada, tal vez haya una buena razón. ¿Alguien sabe?
supongo que eso funcionaría, ya que 'LogEntry.objects.all()' siempre devuelve los registros en el mismo orden (el aumento de la clave principal), ¿verdad? –
no está definido, pero muy probablemente sí. Si quiere estar seguro, solo ordene los resultados por id –
@Mike, Ivan: ..o agregue 'ordering = ('id',)' a Model.Meta –