Я только начинаю учиться писать тесты в Django, поэтому я новичок.
Я сейчас пытаюсь протестировать представление с именем create_person
, которое позволяет пользователю вводить первый и фамилия, для создания объекта персонажа.
Чтобы было понятно, это класс Person
:
class Person(models.Model):
first_name = models.CharField(max_length=100, null=False, blank=False)
last_name = models.CharField(max_length=100, null=False, blank=False)
slug = models.SlugField()
def __str__(self):
return F"%s %s" % (self.first_name, self.last_name)
Я знаю, что даже без указания blank
и null
значений (которые по умолчанию установлены на False
), проверка на уровне шаблона не даст пользователю создать объект Person
, но я бы хотел, чтобы это работало и в бэкэнде.
Имея следующий вид:
def create_person(request):
form = PersonForm()
template_name = 'create_person.html'
persons = Person.objects.all()
works = Work.objects.all()
if request.method == 'POST':
form = PersonForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
Person.objects.create(first_name=first_name, last_name=last_name)
return redirect(home)
context = {'form': form,
'persons': persons,
'works': works,
}
return render(request, template_name, context)
И желая только проверить переменную контекста person, я написал следующий тест:
def test_no_name_person(self):
"""
A person with no name given cannot be created and is not displayed.
"""
create_person('', '')
response = self.client.get('/create_person/')
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(response.context['persons'], [])
Но когда я запускаю тест, я получаю следующее вывод:
AssertionError: Lists differ: ['<Person: >'] != []
Что, насколько я могу судить, означает, что человек с пустыми значениями действительно был создан.
Попытка сделать то же самое в оболочке python результат так или иначе.
Так что мой вопрос: как это возможный'? Кроме того, как я могу написать такую проверку в tests.py?
Спасибо за любые разъяснения