如何在Django中测试UpdateView?

问题描述 投票:0回答:1

我正在尝试在Django中测试视图(UpdateView),但这不起作用。是用于编辑用户的名字和姓氏(基本)的视图。

这是视图:

class UserProfileEditView(LoginRequiredMixin, UpdateView):
    model = User
    template_name = 'user/edit.html'
    fields = ['first_name', 'last_name']

    def get_success_url(self):
        redirect_to = self.request.GET.get(
            'next',
            reverse('main:user_detail', args=[self.request.user.pk])
        )
        return redirect_to

urls.py文件中,我具有以下路径:

path(
    'user/<pk>/edit/',
    views.UserProfileEditView.as_view(),
    name='user_edit'
),

最后,这是我编写的测试,我只想测试用户可以将其名字更改为空白,但这不起作用:

class TestModel(TestCase):
    def test_blank_first_name(self):
        user = factories.UserFactory()
        post_data = {
            'first_name': '',
            'last_name': user.last_name
        }
        response = self.client.post(
            reverse('main:user_edit', kwargs={'pk': user.pk}),
            post_data
        )
        self.assertEqual(response.status_code, 302)
        user.refresh_from_db()
        self.assertEqual(user.first_name, '')

这是我运行python manage.py test时的错误:

AssertionError: 'laugh' != ''

这意味着first_name不会像预期的那样从'laugh'变为”。

我该怎么办?

django unit-testing django-testing
1个回答
0
投票

Román,希望您做得很好!您为什么要尝试使用帖子更新用户?为什么不使用补丁?另外,为什么您期望302重定向而不是200 OK?

要进行更新,您将需要使用补丁[如果要提供用户所需的每个字段,则必须使用补丁]。这将导入from rest_framework import status

response = self.client.patch(
    reverse('main:user_edit', kwargs={'pk': user.pk}),
    post_data
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
user.refresh_from_db()
self.assertEqual(user.first_name, '')

希望这对您有用:)

© www.soinside.com 2019 - 2024. All rights reserved.