在Django中测试url重定向

时间:2015-10-28 08:12:51

标签: python django testing django-testing django-tests

如果我转到http://localhost:8000/login/,系统会显示登录表单,您必须输入usernamepassword。如果凭据正确,那么您将被重定向到http://localhost:8000/dashboard/。我在测试时遇到的问题是,即使我的usernamepassword是正确的,它也不会重定向到http://localhost:8000/dashboard/,而是转到http://testserver/admin/login/?next=/dashboard/。我使用以下代码在django中休息重定向功能:

class UrlTests(TestCase):

    def test_client_cart(self):
        response = self.client.get('/login/')
        self.assertEqual(200, response.status_code)

    def test_login_client(self):
        User.objects.create_user('rakesh', 'rrs402@nyu.edu', 'ranjan')
        self.client.get('/login/')
        self.client.login(username='rakesh', password='ranjan')
        print self.client.get('/dashboard/')

有人可以告诉我为什么我被重定向到http://testserver/admin/login/?next=/dashboard/而不是http://localhost:8000/dashboard/

在我的settings.py文件中:

LOGIN_URL = '/'
LOGOUT_URL = '/logout/'
LOGIN_REDIRECT_URL = '/dashboard/'
LOGOUT_REDIRECT_URL = '/'

我的应用程序工作正常,但我无法测试重定向的事情。任何人都可以给我一些指示我错了吗?

如果我打印出print self.client.login(username='rakesh', password='ranjan'),它就会出现True,这意味着我可以登录,但为什么不重定向?

更新:我也尝试过使用selenium

def login_user(self):
        # User opens his web browser, and goes to the website
        self.browser.get(self.live_server_url + '/login/')
        # User types in his username and passwords and hits return
        username_field = self.browser.find_element_by_name('username')
        username_field.send_keys('rakesh')
        password_field = self.browser.find_element_by_name('password')
        password_field.send_keys('ranjan')
        #User submits the form
        password_field.send_keys(Keys.RETURN)
        body = self.browser.find_element_by_tag_name('body')
        print body.text

我也在这里获取admin页面的body.text而不是dashboard页面。

更新:

仪表板视图:

class PortalDashboardView(RequireStaffMixinView, TemplateView):
    template_name = "portal/dashboard.html"

1 个答案:

答案 0 :(得分:1)

因为您没有登录。您发送到登录呼叫的密码与您在测试用例中创建用户时使用的密码不同,因此凭据无效。

请注意,无论如何都不需要在那里拨打client.get('/login/')