Django assertTemplateUsed重定向后失败

时间:2018-11-16 22:00:05

标签: python django django-unittest

我正在研究Django 2.1实践项目。我的测试的最后一行一直失败。
如果发生重定向,assertTemplateUsed检查是否有效?

  

回溯(最近通话最近):
    在test_home_page_not_login_redirect中的文件“ test_views.py”,第24行       self.assertTemplateUsed(resp,'users / home.html')
    在assertTemplateUsed中的文件“ testcases.py”,第554行       self.fail(msg_prefix +“没有用于呈现响应的模板”)
  AssertionError:没有用于呈现响应的模板

test_views.py
def test_home_page_not_login_redirect(self):
    resp = self.client.get('/')
    self.assertEqual(resp.status_code, 302)
    self.assertRedirects(resp, '/accounts/login/?next=/')
    self.assertTemplateUsed(resp, 'users/login.html')


urls.py
url(r'^login/$',
    auth_views.LoginView.as_view(
        template_name='users/login.html',
        redirect_authenticated_user=True),
    name='users_login'),


settings.py
LOGOUT_REDIRECT_URL = '/accounts/login/'

2 个答案:

答案 0 :(得分:1)

由于重新部署是302 FOUND重定向,因此没有用于HTTP响应的模板!

如果您想真正遵循重定向链,则可以将follow=True参数传递给self.client.gethttps://docs.djangoproject.com/en/2.1/topics/testing/tools/#django.test.Client.get)。这样,您就可以实际检查使用哪个模板来呈现(重定向的)响应。

答案 1 :(得分:0)

非常感谢Serafeim,以下测试终于通过了。

def test_home_page_not_login_redirect(self):
    resp = self.client.get('/', follow=True)
    self.assertEqual(resp.status_code, 200)
    self.assertRedirects(resp, '/accounts/login/?next=/')
    self.assertTemplateUsed(resp, 'users/login.html')