【发布时间】:2012-07-12 15:53:30
【问题描述】:
我想测试提交后消息是否发送给用户。我正在使用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)
在测试客户端 post 方法调用期间似乎没有调用任何中间件。
在@Tisho answer之后更新
应该在response.context 中找到消息,即使我的直觉说它应该可以工作,但它没有。我已将import pdb; pdb.set_trace() 放在 django/contrib/messages/context_processors.py 中以查看它是否在测试期间调用client.post,它不是。
我已经仔细检查了 TEMPLATE_CONTEXT_PROCESSORS、MIDDLEWARE_CLASSES 和 INSTALLED_APPS - 可能明天我会发现我错过了什么。
重要细节
忘了提一下,如果提交视图成功返回 HttpResponseRedirect 因此response.context 为空。
解决方案
视图返回重定向(没有上下文数据),解决我们可以将follow=True传递给client.post方法(@Tisho建议的方法)。
【问题讨论】: