我一直在为我的一个django应用程序编写测试,并一直在寻找解决这个问题的方法。我有一个视图,它在不同的情况下使用django.contrib.messages
发送消息。
from django.contrib import messages
from django.shortcuts import redirect
import custom_messages
def some_view(request):
""" This is a sample view for testing purposes.
"""
some_condition = models.SomeModel.objects.get_or_none(
condition=some_condition)
if some_condition:
messages.success(request, custom_message.SUCCESS)
else:
messages.error(request, custom_message.ERROR)
redirect(some_other_view)
现在,在测试这个视图client.get
的响应时,它不包含context
字典,而context
字典中包含了messages
,因为这个视图使用了重定向。对于呈现模板的视图,我们可以使用messages = response.context.get('messages')
访问消息列表。我们如何才能访问重定向视图的messages
呢?
5条答案
按热度按时间rqenqsqc1#
在
client.get()
调用 中 使用follow=True
选项 , 客户 端 将 跟随 重 定向 。 然后 , 您 可以 测试 消息 是否 位于 重 定向 到 的 视图 的 上下 文 中 。中 的 每 一 个
9rnv2umw2#
你可以使用get_messages()和response.wsgi_request,如下所示(在Django 1.10中测试过):
toiithl63#
如果您的视图是重定向的,并且您在对测试客户端的请求中使用了
follow=true
,那么上面的方法就不起作用了。您可以将它包含在测试类中,并按如下方式使用它:
其中
response
是从get
或post
返回到Client
的值。这是一个有点脆弱,但希望它节省别人一些时间。
eh57zj3b4#
我在使用第三方应用程序时也遇到了同样的问题。
如果您希望从另一个视图中返回HttpResponseRedict(您无法从该视图访问上下文)的视图中获取消息,则可以使用
get_messages(request)
不过,这会清除消息存储,因此如果您以后要访问模板中的消息,请添加:
kwvwclae5#
模拟消息的替代方法(不需要遵循重定向):