У меня есть альтернативное предложение с использованием библиотеки mock
, которая теперь является частью стандартной библиотеки unittest.mock
в Python 3 (если вы используете Python 2, вам придется pip install mock
).
try:
from unittest.mock import MagicMock
except ImportError:
from mock import MagicMock
def test_form_should_post_proper_data_via_signal(self):
"""
Assert signal is sent with proper arguments
"""
# Create handler
handler = MagicMock()
signals.question_posted.connect(handler, sender='test')
# Post the form or do what it takes to send the signal
signals.question_posted.send(sender='test', form_data=form_data)
# Assert the signal was called only once with the args
handler.assert_called_once_with(signal=signals.question_posted, form_data=form_data, sender="test")
Важная часть предложения состоит в том, чтобы смоделировать приемник, а затем проверить, передается ли ваш сигнал этому приемнику и вызывается только один раз.Это замечательно, особенно если у вас есть пользовательские сигналы или вы написали методы, которые отправляют сигналы, и вы хотите убедиться, что они отправляются в ваших модульных тестах.