J'utilise la base de données postgres pré-créée pour mes tests. Voici la configuration pytest:
pytest.ini:Comment puis-je empêcher pytest de supprimer les enregistrements de base de données entre les cas de test?
[pytest]
norecursedirs = frontend static .svn _build tmp*
DJANGO_SETTINGS_MODULE = src.settings.testing
addopts = --reuse-db
testing.py:
from .base import *
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'db',
'USER': 'root',
'PASSWORD': 'pass',
'HOST': 'localhost',
'PORT': '5432',
}
}
appareils de test:
@pytest.fixture(scope='session')
def user():
return User.objects.create(name='Test',)
cas de test:
import pytest
pytestmark = pytest.mark.django_db
def test_user(user):
print(user.pk) # returns pk of newly created user
print(User.objects.all()) # returns queryset with one user
def test_user2(user):
print(user.pk) # returns the same value as in the previous test
print(User.objects.all()) # returns empty queryset
Je ne peux pas comprendre le comportement des fixtures pyest. L'instance de modèle est créée une fois par session et elle est la même dans plusieurs cas de test. Mais la valeur réelle de db est différente. Pytest supprime la valeur utilisateur après le premier test.
Comment puis-je empêcher ce comportement et conserver mes enregistrements db enregistrés pour toutes les sessions de test?
Avez-vous essayé de décorer les tests individuellement avec '@ pytest.mark.django_db'? –
@YerayDiazDiaz oui cela fonctionne de la même manière –