我正在尝试使用Django项目为表单编写测试。 我尝试测试以下BookForm: forms.py
class BookForm(ModelForm):
class Meta:
model = Book
fields = ['title', 'author', 'summary', 'tag', 'genre', 'language', 'book_format', 'read_date']
#labels =
widgets = {
'author': AddAnotherWidgetWrapper(
forms.Select,
reverse_lazy('author_form'),),
'tag': AddAnotherWidgetWrapper(
forms.SelectMultiple,
reverse_lazy('author_form'),),
}
permission_required = 'libraryapp.can_edit'
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
# print(self.request.user)
super(BookForm, self).__init__(*args, **kwargs)
我的test_forms.py看起来像这样:
class BookFormTest(TestCase):
def test_read_date_in_the_past(self):
print('BookForm TEST Lounched')
title = 'TestBookPast'
author = 'TestAuthorPast'
date = datetime.date.today() + datetime.timedelta(days=2)
form_data = {'title': title, 'author': author, 'read_date': date}
form = BookForm(data=form_data)
self.assertTrue(form.is_valid())
我不知道为什么它不起作用。也许我忘记了一些真正重要的东西?
我总是收到此AssertionError:
self.assertTrue(form.is_valid()) AssertionError:假不为真
答案 0 :(得分:4)
显然,该表格对您提供的数据无效。可能是因为您将date
对象传递为read_date
,而不是包含日期的字符串。
检查form.errors
,以明确回答表单无效的原因。
为此,您可以在断言之前添加一条打印语句。
print(form.errors)
如果测试框架吞没了输出,但未将其打印到控制台,则也可以尝试调试器。添加此行:
import pdb; pdb.set_trace()
然后,测试将在提示符(pdb)
的那一行处停止。输入p form.errors
以打印错误。
然后,您可以输入q
退出调试器。
或者,您也可以使用python manage.py shell
启动Python shell并手动输入代码。