Copyright © RevComm Inc.
test_create_user.py
from django.test import TransactionTestCase
class TestUserEmail(TransactionTestCase):
# send_email でメールが送信されたか確認する
def test_failed_to_send_emai(self):
create_user()
self.assertEqual(True, User.object.first().email_sent)
from django.db import transaction
def create_user():
with transaction.atomic():
user = User.objects.create(name="test", email="
[email protected]")
user.save()
transaction.on_commit(send_email, user)
3.Django testing に Deep-dive
18
Transaction を含むテストを TransactionTestCase で実装する
transaction.on_commit
- トランザクションがコミットされるとコールバック関数
が実行される。django.test.TestCase の場合は親のト
ランザクションが張られ続けるのでコミットが発生せ
ず、テストできない。
🔍 参考資料
Transaction on_commit 関数について
https://docs.djangoproject.com/en/4.2/topics/db/transactions/#performing-act
ions-after-commit
create_user.py