Django 如何检查self.client.post中是否有提交名称?

Django 如何检查self.client.post中是否有提交名称?,django,unit-testing,Django,Unit Testing,在这里,我正在为函数delete_position编写测试,但我在这里遇到了一个小问题。我得到了AssertionError:302!=200我想这是因为我没有在client.post中发送delete\u single名称,但它是在我的视图中定义的 如何检查请求中是否有delete\u single。在我的test\u delete\u位置发布 views.py def delete_position(request, pk): position = get_object_or_404

在这里,我正在为函数
delete_position
编写测试,但我在这里遇到了一个小问题。我得到了
AssertionError:302!=200
我想这是因为我没有在
client.post中发送
delete\u single
名称,但它是在我的视图中定义的

如何检查请求中是否有
delete\u single
。在我的
test\u delete\u位置发布

views.py

def delete_position(request, pk):
    position = get_object_or_404(Position, pk=pk)
    if request.method == 'POST' and 'delete_single' in request.POST:
        position.delete()
        messages.success(request, '{} deleted.'.format(position.title))
        return redirect('organization:view_positions')
    else:
        messages.error(request, 'Sorry.Invalid request.')
tests.py

class PositionTestCase(TestCase):
    def setUp(self):
        # create admin user for authentication

        self.admin = get_user_model().objects.create_superuser(username='admin', password='password@123',email='admin@admin.com')

        self.client = Client()

        self.position = Position.objects.create(title='Sr.Python Developer')


        def test_delete_position(self):
           self.client.login(username='admin', password='password@123')
           response = self.client.post(reverse('organization:delete_position', kwargs={'pk': self.position.pk}))
           print(response)
           self.assertEqual(response.status_code, 200)
在这里,我正在为函数delete_位置编写测试,但我在这里遇到了一个小问题。我得到了断言错误:302!=我想这是因为我没有在client.post中发送delete_单个名称,但它是在我的视图中定义的

在成功发布的情况下,302是预期的行为。这是最新的。如果发布成功,则200表示如果用户刷新该页面,他/她将再次发出相同的发布请求。为了防止这种情况发生,它通常会返回一个重定向(HTTP状态302),然后浏览器会发出GET请求来获取对象


因此,最好只更改您的测试,并检查它是否返回302。

a 302是成功删除的预期结果。@WillemVanOnsem我应该执行
self.assertEqual(response.status\u code,302)
然后?是的,如果删除请求成功,您应该检查302。但是您的
delete\u位置
视图在
else
案例中没有返回任何内容。这可能会在某个地方引起500个错误。并且您希望使用您的
self.client.post()
方法来设置
delete\u single
。您可能还应该测试该位置是否实际被删除,例如,通过计算数据库中的对象数(
position.objects.count()
)因此,我应该检查302以查看每个具有重定向的post请求?@StackUser:是的。