2017-07-26 12 views
1

我在使用pytest運行單元測試用例時遇到此錯誤。 它在我的項目中工作正常,但運行測試用例時會引發錯誤。TransactionManagementError:在運行單元測試用例時激活「原子」塊時,這是被禁止的

我的代碼如下:

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 

我讀這類問題的全部解決方案,但我很困惑,爲什麼它不pytest工作。請幫忙。

回答

1

如果您正在測試手工管理事務代碼,你應該標記您的測試如下:

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

更多信息,請參見the pytest-django docs

請注意,您可能能夠重構代碼並在try ... except塊內使用with transaction.atomic():,而不是執行手動事務管理。示例請參閱Django docs

+0

你好,我試過你的建議,@ pytest.mark.django_db(transaction = True),它不工作,通過使用transaction.atomic()它的工作正常,但爲什麼transaction.set_autocommit(autocommit = False)不是使用pytest? –

+0

我不明白爲什麼它不能從你提供的信息中工作。 – Alasdair

+0

好的,謝謝你的建議。 –

相關問題