Как протестировать Djang PasswordChangeForm

Я пытаюсь написать тест для моего представления смены пароля, которое использует PasswordChangeForm. Вот этот тест:

def test_profile_change_password(self):
    self.client.force_login(self.user)
    self.user.set_password(self.password)
    new_password = random_password()
    payload = {
        "old_password": self.password,
        "new_password1": new_password,
        "new_password2": new_password,
    }
    form = PasswordChangeForm(user=self.user, data=payload)
    self.assertTrue(form.is_valid())
    
    response = self.client.get(
        reverse_lazy("researcher_ui:change_password"),
    )
    self.assertEqual(response.template_name, ["researcher_UI/change_password.html"])

    response = self.client.post(
        reverse_lazy("researcher_ui:change_password"), payload
    )
    print(response.context['form'].error_messages)

Тест self.assertTrue(form.is_valid()) работает, но когда я затем пытаюсь обработать те же данные через представление, я получаю следующие ошибки:

{'password_mismatch': 'The two password fields didn’t match.', 'password_incorrect': 'Your old password was entered incorrectly. Please enter it again.'}

В этом случае form.is_valid() не должен был возвращать True, так что я делаю что-то не так?

Возможно, вы немного ошибаетесь:

form.error_messages - он постоянный, чтобы сохранять сообщения, если валидация падает. Как здесь https://docs.djangoproject.com/en/5.0/ref/forms/fields/#error-messages

для вашего случая вам нужно form.errors

print(form.errors)

больше здесь: https://docs.djangoproject.com/en/5.0/ref/forms/api/#django.forms.Form.errors

Вернуться на верх