Ich habe einen Test (django pytest), der Objekte in DB manipulieren muss. Die Sache ist, dass nach dem Test die DB "schmutzig" ist und andere Tests fehlschlagen. Ich habe etwas über TransactionTestCase gesehen, aber ich kann nicht verstehen, wie es mit dem Django-Test funktioniert.Django pytest: Lösche DB nach dem Ausführen eines Testfalls
Hier ist ein einfaches Beispiel für meine aktuellen Code:
@pytest.mark.django_db
def test_something(mock_my_obj):
mock_my_obj.save()
# test test test
...
# I don't want to delete the obj here...
UPDATE: Zweiter Versuch: Ich habe gelesen, dass TestCase Transaktionen verwenden sollten, und rollen sie für jeden Test zurück. Nichts für mich arbeiten:
from django.test import TestCase
class MyTests(TestCase):
def test_yair_a(self):
print 'AAAAAAA'
print Account.objects.all()
Account.objects.create(account_id=1,account_name='1')
print Account.objects.all()
def test_yair_b(self):
print 'BBBBBBBB'
print Account.objects.all()
Account.objects.create(account_id=2,account_name='2')
print Account.objects.all()
Ergebnis (die interessanten Teile):
> py.test -s -v -k test_yair
AAAAAAA
[]
[<Account: 1>]
PASSED
BBBBBBBB
[<Account: 1>]
[<Account: 1>, <Account: 2>]
PASSED
keine Transaktion Bedeutung wurde wieder am Ende des Test_a gerollt.
Das ist eigenartig. [Die Dokumente] (http://pytest-django.readthedocs.io/en/latest/database.html#enabling-database-access-in-tests) geben an, dass Testtransaktionen nach jedem Test zurückgesetzt werden. Vielleicht hat es damit zu tun, dass Sie das Objekt injizieren, anstatt es in der Testfunktion selbst zu erstellen. –
Ich glaube nicht - der Schein ist nur ein Objekt. Ich speichere es im Test selbst an die DB – reformy
Kannst du ein [minimal funktionierendes Beispiel] (https://stackoverflow.com/help/mcve) posten? –