mirror of
https://github.com/django/django.git
synced 2025-07-24 13:44:32 +00:00
Fixed #30457 -- Added TestCase.captureOnCommitCallbacks().
This commit is contained in:
parent
ca6c5e5fc2
commit
e906ff6fca
5 changed files with 137 additions and 4 deletions
|
@ -881,6 +881,42 @@ It also provides an additional method:
|
|||
previous versions of Django these objects were reused and changes made
|
||||
to them were persisted between test methods.
|
||||
|
||||
.. classmethod:: TestCase.captureOnCommitCallbacks(using=DEFAULT_DB_ALIAS, execute=False)
|
||||
|
||||
.. versionadded:: 3.2
|
||||
|
||||
Returns a context manager that captures :func:`transaction.on_commit()
|
||||
<django.db.transaction.on_commit>` callbacks for the given database
|
||||
connection. It returns a list that contains, on exit of the context, the
|
||||
captured callback functions. From this list you can make assertions on the
|
||||
callbacks or call them to invoke their side effects, emulating a commit.
|
||||
|
||||
``using`` is the alias of the database connection to capture callbacks for.
|
||||
|
||||
If ``execute`` is ``True``, all the callbacks will be called as the context
|
||||
manager exits, if no exception occurred. This emulates a commit after the
|
||||
wrapped block of code.
|
||||
|
||||
For example::
|
||||
|
||||
from django.core import mail
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
class ContactTests(TestCase):
|
||||
def test_post(self):
|
||||
with self.captureOnCommitCallbacks(execute=True) as callbacks:
|
||||
response = self.client.post(
|
||||
'/contact/',
|
||||
{'message': 'I like your site'},
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(callbacks), 1)
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].subject, 'Contact Form')
|
||||
self.assertEqual(mail.outbox[0].body, 'I like your site')
|
||||
|
||||
.. _live-test-server:
|
||||
|
||||
``LiveServerTestCase``
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue