我想测试提交后是否将消息发送给用户。我正在使用django.contrib.messages。在手动测试(runserver)期间一切似乎都在工作,但在单元测试中我没有收到消息。
存储消息的代码:
messages.success(request, _('Internationalized evil message.'))
应该测试消息的代码:
from django.contrib.messages.api import get_messages
...
def test_message_should_sent_to_user(self):
"""After successful phone number submit, message should be displayed."""
response = self.client.post(
reverse('evil.views.evil_data_submit'), self.valid_data)
messages = get_messages(response.request)
self.assertNotEqual(len(messages), 0)
看起来在测试客户端发布方法调用期间没有调用任何中间件。
@Tisho回答后更新
应该在 中找到消息response.context
,甚至我的胆量都说它应该可以工作,但事实并非如此。我已经放在import pdb; pdb.set_trace()
django/contrib/messages/context_processors.py 中,看看它是否在 test 期间被调用client.post
,它不是。
我已经仔细检查了TEMPLATE_CONTEXT_PROCESSORS
,MIDDLEWARE_CLASSES
并且INSTALLED_APPS
- 可能明天我会发现我错过了一些东西。
重要细节
忘了提一下,如果成功提交视图返回HttpResponseRedirect因此response.context
是空的。
解决方案
视图返回重定向(没有上下文数据),以解决我们可以传递follow=True
给 client.post 方法(@Tisho 建议的方法)。