Django 测试用例获得与 Firefox 或 Chrome 不同的重定向

Django Test Case gets diffrent redirect than Firefox or Chrome

尝试在一个项目上工作并开始关注单元测试。 我很困惑为什么 client.get 得到的重定向与 Firefox 和 Chrome 不同。

下面有详细信息,但有人可以告诉我这是怎么回事吗。

我的视图功能。

class UserDashboardView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponseRedirect('/accounts/login')

我的测试用例

import unittest
from django.test import TestCase

class DashboardPageTest(TestCase):

    def test_unauthenticated_user_redirected_to_login(self):
        response = self.client.get('/dashboard')
        print(response)

发生了什么。

1 - 如果我在 Chrome 和 Firefox 中转到 /dashboard,调试显示 302,位置键为 /accounts/login,因此浏览器遵循 /accounts/login

2 - 如果我 运行 单元测试(python manage.py 测试)打印响应 returns

<HttpResponsePermanentRedirect status_code=301, "text/html; charset=utf-8", url="/dashboard/">

我有一种感觉,我只是不了解浏览器与 TestCase 的重定向方式。有人可以解释一下吗?

您在单元测试中遗漏了尾部斜杠,因此它正在从 /dashboard 重定向到 /dashboard/

解决了。 在 Django test client gets 301 redirection when accessing url

找到解决方案

基本上 Django 很有帮助,并在请求的末尾添加了一个 /。因此它发回了一个永久重定向让我知道。 Chrome firefox 肯定已经处理过了 将测试用例中的行更改为

response = self.client.get('/dashboard/') 而不是 response = self.client.get('/dashboard') 并且它 returns 302。现在我看看浏览器 我打算在浏览器中访问 /dashboard/。