#python #django #unit-testing
#python #django #модульное тестирование
Вопрос:
В настоящее время я пытаюсь создать тест для своей формы, который наверняка является допустимым, потому что я тестировал его вручную в своем приложении, но в моем тесте покажите мне, что моя форма.is_valid == False. Я не знаю, что я делаю не так в своем тесте, есть ли способ проверить каждое поле отдельно, чтобы найти причину недействительности в моей тестируемой форме?
Мой код:
forms.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. Напишите свой тест следующим образом:
self.assertTrue(form.is_valid(), f"Form should be valid but has following errors: {form.errors}")
чтобы он показывал вам ошибки формы.2. итак, у меня проблема с моим полем «ник», здесь должен быть ник 1 из уже зарегистрированных пользователей (это ForeignKey для User model), поэтому я попытался создать нового пользователя в своем тесте, но это не сработало. у меня эта ошибка «Выберите правильное значение. Given не является одним из доступных вариантов.», есть ли возможность создать или импортировать user для целей тестирования?
3. В данных, которые вы публикуете, вы должны указывать идентификатор пользователя:
'nick': user.id
4. спасибо, проблема решена 🙂
5. Но просто в качестве дополнительного примечания: никогда не полагайтесь на опубликованные данные, чтобы связать комментарий с пользователем. Любой может отправить форму с другим идентификатором пользователя, даже если это скрытое поле.
Ответ №1:
Тестовые утверждения всегда имеют необязательный аргумент (последний или msg
), позволяющий распечатать сообщение в случае сбоя утверждения. Вы должны использовать это как можно чаще в своих тестах (если только сам результат не очевиден), чтобы помочь вам определить причину сбоя утверждения:
self.assertTrue(
form.is_valid(),
msg=f"form should have been valid, but contains errors: {form.errors}")
Таким образом, ошибки будут выведены на вывод вашей тестовой консоли.