我有以下单元测试
def test_category_update_view(self):
"""
Make sure that a category can be updated
:return:
"""
self.log_user_1_in()
self.assertEqual('Bacon', self.category.name)
res = self.client.put(
reverse(
'calendars:categories:edit_category',
kwargs={'calendar_pk': self.calendar.id, 'pk': self.category.id}
),
urlencode({'name': 'bacon is yummy'})
)
self.assertEqual('bacon is yummy', self.category.name)
self.assertEqual(302, res.status_code)
self.assertEqual(
reverse('calendars:categories:category_list', kwargs={'calendar_pk': self.calendar.id}),
res.url
)
正如你所看到的,它说表单无效,所以我的问题是为什么它无效?测试客户端不应该使用我提供的数据吗?我以相同方式完成的 POST 请求工作正常并传递了正确的数据。
我已经有一段时间没有发帖了,如果这有点模糊,请原谅我。如果您需要更多信息来帮助我,请告诉我。
当您使用
self.client.put/post/patch...
等发布数据时,您不应该对要发送的数据进行 urlencode。你的字典{'name': 'bacon is yummy'}
最终会被转换为'name=bacon+is+yummy'
,然后Django无法解码你发送的字段(如果你想将其作为GET
参数发送,那是有意义的)。
相反,请尝试使用此代码without
urlencode
:
res = self.client.put(
reverse(
'calendars:categories:edit_category',
kwargs={'calendar_pk': self.calendar.id, 'pk': self.category.id}
),
{'name': 'bacon is yummy'}
)