2017-07-26 1 views
1

Je reçois cette erreur pendant que j'essaie d'exécuter le cas de test unitaire en utilisant pytest. Cela fonctionne correctement dans mon projet mais génère une erreur lors de l'exécution du scénario de test.TransactionManagementError: Ceci est interdit lorsqu'un bloc 'atomic' est actif pendant l'exécution de cas de test unitaires

Mon code est le suivant:

def saveEvents(request, request_data): 
    transaction.set_autocommit(autocommit=False) 
    try: 
     # here is my code 
    except Exception as inst: 
     transaction.rollback() 
     # code 
    transaction.commit() 
    return something 

J'ai lu toutes les solutions de ce type de questions, mais je suis perplexe pourquoi sa ne fonctionne pas avec pytest. S'il vous plaît aider.

Répondre

1

Si vous testez le code qui gère manuellement les transactions, vous devez marquer votre test comme suit:

@pytest.mark.django_db(transaction=True) 
def my_test(): 
    ... 

Voir the pytest-django docs pour plus d'informations.

Notez que vous pouvez peut-être restructurer votre code et utiliser with transaction.atomic(): à l'intérieur d'un bloc try .. except au lieu de faire une gestion manuelle des transactions. Voir le Django docs pour des exemples.

+0

bonjour, j'ai essayé vos suggestions, @ pytest.mark.django_db (transaction = True), son ne fonctionne pas, en utilisant avec transaction.atomic() fonctionne bien, mais pourquoi transaction.set_autocommit (autocommit = False) n'est pas travailler avec pytest? –

+0

Je ne peux pas dire pourquoi cela ne fonctionne pas à partir des informations que vous avez données. – Alasdair

+0

Ok, merci pour vos suggestions. –