В настоящее время я пытаюсь создать тест для своей формы, который наверняка действителен, потому что я тестировал его вручную в своем приложении, но в моем тесте показано, что мой form.is_valid == False. Я не знаю, что я делаю неправильно в своем тесте, есть ли способ проверить каждое поле отдельно, чтобы выяснить, что вызывает недействительность в моей тестируемой форме?
Мой код:
формы.py
from django.forms import ModelForm
from django import forms
from .models import Comment
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ['nick', 'rate', 'content']
widgets = {'nick': forms.HiddenInput()}
test_forms.py
from django.test import TestCase
from django.contrib.auth.models import User
from ..forms import CommentForm
class CommentFormTest(TestCase):
def test_form(self):
user = User.objects.create(username='Testowy')
form_data = {
'nick': user,
'rate': '1',
'content': 'test content',
}
form = CommentForm(data=form_data)
self.assertEqual(form.is_valid(), True)
поэтому у меня проблема с моим полем «ник», здесь должен быть ник 1 из уже зарегистрированных пользователей (это модель ForeignKey to User), поэтому я попытался создать нового пользователя в своем тесте, но это не работает, у меня есть эта ошибка «Выберите правильное значение. Данный вариант не является одним из доступных вариантов.», есть ли возможность создать или импортировать пользователя для целей тестирования?
В данных, которые вы публикуете, вы должны указать идентификатор пользователя: 'nick': user.id
спасибо, проблема решена :)
Но в качестве примечания: никогда не полагайтесь на опубликованные данные, чтобы связать комментарий с пользователем. Любой может отправить форму с другим идентификатором пользователя, даже если это скрытое поле.
в моем представлении.py у меня есть, что этот файл автоматически заполняется уже зарегистрированным пользователем (form = CommentForm(initial = {'nick': request.user})), но если это не хороший метод, я буду искать лучшие методы для сделай так, спасибо за совет






У тестовых утверждений всегда есть необязательный аргумент (последний или msg), чтобы вы могли напечатать сообщение в случае неудачного утверждения. Вы должны использовать это как можно чаще в своих тестах (если только сам результат не очевиден), чтобы помочь вам определить причину ошибки утверждения:
self.assertTrue(
form.is_valid(),
msg=f"form should have been valid, but contains errors: {form.errors}")
Таким образом, ошибки будут напечатаны на выходе вашей тестовой консоли.
Напишите свой тест следующим образом:
self.assertTrue(form.is_valid(), f"Form should be valid but has following errors: {form.errors}")чтобы он показывал вам ошибки формы.