Django 测试单元登录用户

Django test unit logged in user

我需要一些单元测试来检查用户在成功登录后是否可以打开个人资料编辑页面,我应该怎么做?

我试过这段代码,但它显示错误。我是否必须使用自己的视图来注册用户然后登录,或者是否有一些单元测试模块?

class UserProfilePage(TestCase):

    def setUp(self):
        self.credentials = {
            'username': 'test_user',
            'password': 'secret'}
        user = User.objects.create_user(**self.credentials)

        self.user_profile = {
            'user': user,
            'first_name': 'Test_1',
            'surname': 'test_surname',
            'about_me': 'some_info',
            'email': 'test@anymail.com',
        }
                UserProfile.objects.create(**self.user_profile).save()
    self.user_id = UserProfile.objects.get(user=user.id)

    def test_profile_page_and_current_template(self):
        response = self.client.get('/blog/user/profile/', self.user_id)
        self.assertEqual(response.status_code, 200)

ValueError: Cannot query "Test_1": Must be "User" instance.

客户端 API 允许您像这样登录用户:

self.client.force_login(user)

只需 运行 在您的测试中访问个人资料页面之前。

您的代码也有错误。

...
self.user_id = UserProfile.objects.get(user=user)
...

此处您将配置文件对象分配给 user_id,稍后尝试将 user_id 作为请求中的参数传递,而不是用户 ID。我猜这就是你收到错误的原因。

我建议只将 user 设置为对象 属性;你不需要任何其他东西。然后在测试中使用 self.user.id 访问它。

另请参阅:https://docs.djangoproject.com/en/4.0/topics/testing/tools/#django.test.Client.force_login