我如何对 Django 消息进行单元测试?

新手上路,请多包涵

在我的 Django 应用程序中,我正在尝试编写一个单元测试来执行一个操作,然后检查响应中的消息。

据我所知,没有好的方法可以做到这一点。

我正在使用 CookieStorage 存储方法,我想做类似下面的事情:

     response = self.client.post('/do-something/', follow=True)
    self.assertEquals(response.context['messages'][0], "fail.")

问题是,我得到的只是一个

print response.context['messages']
<django.contrib.messages.storage.cookie.CookieStorage object at 0x3c55250>

我怎样才能把它变成有用的东西,还是我做错了?

谢谢,丹尼尔

原文由 dvydra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
2 个回答

我找到了一个非常简单的方法:

 response = self.client.post('/foo/')
messages = list(response.context['messages'])
self.assertEqual(len(messages), 1)
self.assertEqual(str(messages[0]), 'my message')

如果您需要检查没有上下文的响应中的消息,您可以使用以下命令:

 from django.contrib.messages import get_messages
messages = list(get_messages(response.wsgi_request))
self.assertEqual(len(messages), 1)
self.assertEqual(str(messages[0]), 'my message')

回退存储不支持索引,但它是一个可迭代的。

原文由 daveoncode 发布,翻译遵循 CC BY-SA 4.0 许可协议

来自 django 文档

在模板之外,您可以使用 get_messages()

所以,你可以这样写:

 from django.contrib.messages import get_messages

[...]

messages = [m.message for m in get_messages(response.wsgi_request)]
self.assertIn('My message', messages)

原文由 moppag 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏