Django 为什么即使没有表单错误,我的POST请求也没有按照单元测试中的预期重定向?
我有一个带有表单的Django视图,我将在单元测试中发布到它。以下是测试的总体结构:Django 为什么即使没有表单错误,我的POST请求也没有按照单元测试中的预期重定向?,django,redirect,django-forms,http-post,django-unittest,Django,Redirect,Django Forms,Http Post,Django Unittest,我有一个带有表单的Django视图,我将在单元测试中发布到它。以下是测试的总体结构: class ViewTests(TestCase): form_url = reverse_lazy('myapp:form') success_url = reverse_lazy('myapp:success') def test_form_submission_with_valid_data_creates_new_object_and_redirects(self):
class ViewTests(TestCase):
form_url = reverse_lazy('myapp:form')
success_url = reverse_lazy('myapp:success')
def test_form_submission_with_valid_data_creates_new_object_and_redirects(self):
attributes = EntryFactory.attributes()
attributes['product'] = ProductFactory() # Entry has a ForeignKey to Product
response = self.client.post(self.form_url, attributes, follow=True)
self.assertEqual(response.status_code, 200)
self.assertRedirects(response, self.success_url)
self.assertTemplateUsed(response, 'myapp/success.html')
然而,我似乎不明白为什么重定向没有按预期工作。我试着输入一个
导入pdb;pdb.set_trace()
查看是否存在任何表单错误(response.context['form'].errors
),但我得到的只是一个空的dict。在浏览器中提交表单会正确重定向,因此我不确定单元测试失败的原因,而且也不知道如何正确地调试它,因为错误记录表中没有显示任何错误。结果是有一些地方出错了
首先,实际上页面上还有第二个表单(用于选择产品
),我错过了。与此相关,我应该将ProductFactory().id
分配给属性['product']
,而不是ProductFactory
其次,在我更改了那个位之后,assertRedirects
出现了一个问题;我必须将self.success\u url
更改为unicode(self.success\u url)
,因为assertRedirects
无法与代理进行比较
最终产品:
def test_form_submission_with_valid_data_create_new_entry_and_redirects(self):
attributes = EntryFactory.attributes()
attributes['product'] = ProductFactory().id
response = self.client.post(self.form_url, attributes)
self.assertRedirects(response, unicode(self.success_url))
这是一个非常长的函数名哦,关于你的问题,由于重定向测试失败,我几乎不相信这与你的表单有任何关系。你能分享你的URL.py和你看到的失败消息吗?我怀疑一个坏的链接可能是这个问题的根源problem@yuvi当然是的,但是当有大量的单元测试时,这个“非常长的名称”会派上用场,你想从它的名称知道一个失败的单元测试会做什么。看起来“valid\u form\u和\u redirect”只是一个很好的名称。谢谢你的建议,我会考虑的