django - Django 测试单元登录用户

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

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

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.

回答1

客户端 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

相似文章