Для этого можно использовать Макет (при модульном тестировании). Извлеките атрибут delay
в своей задаче, а затем проверьте атрибут called
макета. В вашем примере попробуйте что-то вроде:
# tests.py
from mock import Mock, patch
class MyTest(TestCase):
def test_task_triggered(self):
with patch('views.tasks.add.delay') as patch_mock:
self.client.get('/')
self.assertTrue(patch_mock.called)
Предостережение в том, что после того, как вы это сделаете, tasks.add фактически не будет вызываться в этом тестовом примере, поскольку мы заменили его на макет. Этот тест просто подтвердит, что он вызывается (и вы можете проверить patch_mock.call_args_list
, чтобы подтвердить, что он вызывается с правильными аргументами)
Если это нарушает условия сделки - вы хотите в одном тестовом случае утверждать, что задача вызывается, а также о влиянии / побочных эффектах задачи - вы можете поэкспериментировать с атрибутом wraps
mock
, который может работать:
# tests.py
from mock import Mock, patch
class MyTest(TestCase):
def test_task_triggered(self):
add_mock = Mock(wraps=tasks.add)
with patch('views.tasks.add.delay', new=add_mock):
self.client.get('/')
self.assertTrue(add_mock.called)
Но другой способ, вероятно, лучше, поскольку он лучше изолирует то, что тестируется.