测试登录重定向

时间:2015-11-12 00:05:43

标签: python django unit-testing tdd

我一直在尝试在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

感谢所有帮助:)

1 个答案:

答案 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

希望它有所帮助。