Юнит-тестирование Django для ProfileEditForm с отключенными (только для чтения) полями
Я хочу написать модульные тесты для моей формы ProfileEditForm
, которая имеет некоторые поля с disabled=True
. Эти поля доступны только для чтения и не могут быть изменены. Я хочу протестировать эту логику. Насколько я знаю, мне не нужно передавать форме поля disabled. Форма сама проверяет эти поля.
models.py
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=63, blank=False)
last_name = models.CharField(max_length=63, blank=False)
about_me = models.CharField(max_length=511, blank=True)
forms.py
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = [
"username",
"email",
"first_name",
"last_name",
"about_me",
]
username = forms.CharField(label="Username", disabled=True)
email = forms.EmailField(label="Email", disabled=True)
first_name = forms.CharField(label="First Name", max_length=63, required=False)
last_name = forms.CharField(label="Last Name", max_length=63, required=False)
about_me = forms.CharField(label="About Me", max_length=511, required=False)
tests.py
class ProfileEditFormTests(TestCase):
def setUp(self) -> None:
self.user = get_user_model().objects.create_user(username="testuser",
email="test@test.com",
password="password123")
self.profile = Profile.objects.create(user=self.user)
def test_email_field_is_not_editable(self):
form_data = {
"username": self.profile.user.username,
"email": self.profile.user.email,
"first_name": "first",
"last_name": "last",
"about_me": "",
}
form = ProfileEditForm(data=form_data)
self.assertTrue(form.is_valid())
Я получаю:
AssertionError: False is not true
Когда я распечатываю ошибки формы с print(form.errors)
:
<ul class="errorlist"><li>username<ul class="errorlist"><li>This field is required.</li></ul></li><li>email<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
Даже если я указываю все поля, форма все равно недействительна.
form_data = {
"username": self.profile.user.username,
"email": self.profile.user.email,
"first_name": "first",
"last_name": "last",
"about_me": "",
}
Я получаю ту же ошибку Ничего не меняется.
Во время теста я проверяю, успешно ли создан экземпляр Profile
с помощью Profile.objects.count()
. Ответ положительный.
Для примера: я использую общий UpdateView для редактирования профилей пользователей с помощью ProfileEditForm
. Представление и форма работают хорошо.
Как писать модульные тесты для полей, доступных только для чтения?