Zer*_*rox 5 python django unit-testing django-views
我有以下单元测试
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
)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它说表单无效,所以我的问题是它为什么无效?测试客户端不应该使用我提供的数据吗?我以相同方式完成的 POST 请求工作正常并传递正确的数据。
我有一段时间没有发帖了,如果这有点含糊,请原谅我。如果您需要更多信息来帮助我,请告诉我。
当您使用self.client.put/post/patch...etc 发布数据时,您不应该对要发送的数据进行 urlencode。你的字典{'name': 'bacon is yummy'}最终会被转换成'name=bacon+is+yummy',然后 Django 无法解码你发送的字段(如果你想将它作为GET参数发送,那么这是有意义的)。
相反,尝试使用此代码而不使用 urlencode:
res = self.client.put(
reverse(
'calendars:categories:edit_category',
kwargs={'calendar_pk': self.calendar.id, 'pk': self.category.id}
),
{'name': 'bacon is yummy'}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |