我一直在尝试在Django中实现一个用户配置文件系统,它允许您简单地请求" / profile /"作为登录时重定向到用户配置文件的URL,如果没有则重定向到登录页面。
测试编写如下
class LoggedInProfileTest(TestCase):
def setUp(self):
self.factory = RequestFactory()
self.user = User.objects.create_user(
username='Milhouse',
email="milhouse@gmail.com",
password="MilhousePW")
def tearDown(self):
self.user.delete()
def test_user_profile_redirect(self):
request = self.factory.get("/profile/")
request.user = self.user
response = profile_redirect(request)
self.assertRedirects(
response,
expected_url="/profile/Milhouse/")
实际上功能正常,并根据需要重定向,但测试拒绝传递,抛出以下错误。
AttributeError: 'HttpResponseRedirect' object has no attribute 'client'
网址路由代码
# main urls.py
urlpatterns = [
...
url(r'^profile/', include('profiles.urls')),
...
]
# profiles.py
urlpatterns = [
url(r'^(?P<username>[\w+-.@]+)/$',
views.user_profile,
name="user_profile"),
url(r'^$',
views.profile_redirect,
name="profile_redirect")
]
观看代码
@login_required
def profile_redirect(request):
return redirect("user_profile", request.user.username)
def user_profile(request, username):
pass
感谢所有帮助:)
答案 0 :(得分:0)
您应该使用Testcase提供的client
。
首先,您需要创建一个用于在数据库中进行测试的用户。您应该在测试代码中明确地执行此操作。
假设您要在测试用例中登录的用户具有用户名username
和密码password
。然后,您可以执行以下操作:
self.client.login(username=username, password=password) # This do the login work
response = self.client.get('/profile')
# here do your assert work
希望它有所帮助。