【发布时间】:2016-10-09 14:36:30
【问题描述】:
我已经为delete REST API 编写了一个单元测试,但它失败了
{u'detail': u'CSRF Failed: CSRF cookie not set.'}
不知道为什么它检查 CSRF cookie,尽管我在测试用例的顶部设置了 enforce_csrf_checks=True。
这是我的测试用例
def setUp(self):
self.user = Customer.objects.create_user(email="test@gmail.com", password="12345678open", username="tanvir")
self.requirement_header = RequirementHeader.objects.create_requirement_header(user=self.user)
self.requirement_header_id = self.requirement_header.id
self.description = "Description"
self.file = '/requirements/test_data/test.txt'
self.requirement_lines = RequirementLine.objects.get_or_create(
requirement_header=self.requirement_header,
description=self.description,
file=self.file,
)[0]
def test_delete_requirement_line(self):
client = APIClient(enforce_csrf_checks=True)
logged_in = client.login(username=self.user.email, password='12345678open')
if logged_in:
data = {
'deleting_user': self.user.email
}
response = client.delete('/api/requirements/requirement-line/%d/' % self.requirement_lines.id, data, format='json')
self.assertEqual(response.status_code, 204)
事实上,这里response.data 返回{u'detail': u'CSRF Failed: CSRF cookie not set.'},这就是为什么状态码是303 并且测试失败的原因。
我的 API 视图:
class RequirementLineRetrieveUpdateDestroyAPIView(BaseRetrieveUpdateDestroyAPIView):
serializer_class = RequirementLineSerializer
parser_classes = (MultiPartParser,)
def delete(self, request, requirement_line_id, *args, **kwargs):
deleting_user = request.user
try:
obj = RequirementService().delete_requirement_line(
deleting_user=deleting_user,
requirement_line_id=requirement_line_id,
)
return Response(status=status.HTTP_204_NO_CONTENT)
except ObjectDoesNotExist as e:
return Response(e.message, status=status.HTTP_404_NOT_FOUND)
我正在使用 Django 1.9 和 DRF 3.x
【问题讨论】:
标签: django unit-testing cookies django-rest-framework