Как проверить UpdateView в Django? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь проверить представление (UpdateView) в Django, но это не работает. Представление, которое используется для редактирования имени и фамилии пользователя (basi c).

Это представление:

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 не изменилось с «смех» на «», как ожидалось.

Что я делаю не так?

1 Ответ

0 голосов
/ 07 января 2020

Роман, надеюсь, у тебя все отлично! Почему вы пытаетесь обновить пользователя с помощью сообщения? Почему бы вам не использовать патч? Кроме того, почему вы ожидаете перенаправление 302 вместо 200 OK?

Для обновления вам нужно будет использовать патч [или put, если вы предоставляете все поля, необходимые для пользователя]. Это будет импортировать 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, '')

Надеюсь, это работает для вас:)

...