【发布时间】:2018-05-03 15:42:55
【问题描述】:
在 Django 中,我有一个视图,它将重定向到某些用户的注册页面,我想为此编写一个测试。
用于测试的标准request.client.get 不允许我指定用户(它只是默认为anonymous_user?),所以我无法测试行为。
使用RequestFactory(),我可以指定request.user。但是,它没有遵循重定向并且测试失败。
from .views import my_view
from django.test import RequestFactory()
def test_mytest(self):
user = create_guest_user()
self.factory = RequestFactory()
request = self.factory.get(reverse('my_view'), follow=True)
request.user = user
response = my_view(request)
self.assertContains(response, "page where redirected should contain this")
它在最后一行失败并显示以下错误消息:
AssertionError: 302 != 200 : Couldn't retrieve content: Response code was 302 (expected 200)
任何想法如何做到这一点?
编辑:据我所知,这不是重复的,因为它指的是 RequestFactory(),这与 self.client.get 不同(follow=True 将解决问题)。
【问题讨论】:
-
不是重复的。在那种情况下,焦点是
SimpleTestCase在这里我们正在谈论RequestFactory类。这也是关于遵循重定向而不是assertRedirect -
您不能发出
RequestFactory()关注请求。它只是创建了一个request对象。如果您使用RequestFactory,那么您需要检查响应代码,获取重定向位置,将该位置解析为视图,然后调用该视图。client旨在为您处理所有这些问题,因此您应该改用它。 -
感谢 Alasdair - 这与下面的建议一起帮助了很多登录匿名用户。
标签: python django django-testing