Django的test_forms提供AssertionError

时间:2018-07-08 15:24:37

标签: python django forms sqlite testing

我正在尝试使用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:假不为真

1 个答案:

答案 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并手动输入代码。