Django 测试重定向的页面

Django test for a page that redirects

我正在尝试为重定向到 仪表板 的视图编写测试,但我没有得到正确的结果。在 he/she 可以访问 (membership) 视图之前,必须对用户进行身份验证。 在我的 urls.py 中,我有类似

的内容
...
path('membership/', MembershipView.as_view(), name='membership'),
...

那么我的tests.py包含

class TestApp(TestCase):
    def test_that_membership_resolves(self):
        client = Client()
        response = client.post('/membership/', {
            # I then pass the necessary values in a dictionary
            ...
            ...
        })
        self.assertRedirects(response, reverse("src:dashboard"))

但是我收到一条错误消息

self.assertEqual(
AssertionError: '/login/?next=%2Fmembership%2F' != '/dashboard'
- /login/?next=%2Fmembership%2F
+ /dashboard
 : Response redirected to '/login/?next=/membership/', expected '/dashboard'Expected '/login/?next=/membership/' to equal '/dashboard'.

我认为它告诉我先登录。我已经有一个测试登录和测试通过的方法。我该如何解决这里的问题?

然后在实例化你的客户端后先登录。您的视图需要登录才能查看,所以您需要先登录?

client.login(email="testuser1@example.com", password="testpass123")

或者在您的测试设置中有效的任何用户登录

编辑:对所有测试使用设置,因此您对所有测试都有一些初始数据:

class TestViews(TestCase):
    def setUp(self):
        self.user = get_user_model().objects.create_user(email="testuser1@example.com",password="testpass123",)
    def test_that_membership_resolves(self):
        client = Client()
        client.login(email="testuser1@example.com", password="testpass123")
        response = client.post('/membership/', {
            # I then pass the necessary values in a dictionary
            ...
            ...
        })
        self.assertRedirects(response, reverse("src:dashboard"))


    def test_whatever_else_comes_next_to_test(self):
        # use your setUp data again for another test