我正在尝试创建自动化测试,我想要的是检查我的TestCase是否有一个位置标题,它应该基于我在views.py中的代码(已经在高级REST客户端中测试过)。但是,我无法在tests.py
中解析它这是我的代码:
from rest_framework import status
from rest_framework.test import APITestCase
url_1 = reverse('artists-list')
class ArtistTest(APITestCase):
# Check the response if there is no data
def test_get(self):
# Checks the artists
# self.client attribute will be an APIClient instance
# Basically it will act as a client
response = self.client.get(url_1)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(response.content, '') # There should be no data
# self.assertEqual(len(data), 0)
# print ("%s.%s DONE - 1" % (self.__class__.__name__, inspect.stack()[0][3]))
def test_post(self):
_data = {"name": "50 Cent", "birth_date":"2005-02-13"}
response = self.client.post(url_1, _data)
print "----"
print response.headers
data = json.loads(response.content)["data"]
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(data, _data)
self.assertEqual(Artist.objects.count(), 1)
self.assertEqual(Artist.objects.get().name, '50 Cent')
P.S。
请注意:
print response.headers # this throws an error
print response # shows the header but I want it to be parsed
答案 0 :(得分:4)
有几种选择:
>>> response.has_header('Location')
True
>>> response.get('Location') # None if key not in headers
My location
>>> response['Location'] # KeyError if key doesn't exist
My location
>>> response._headers # headers as dict
{'allow': ('Allow', 'GET, POST, HEAD, OPTIONS'), 'Location': ...}
>>> response.serialize_headers() # headers as bytestring (in Python 3)
b'Allow: GET, POST, HEAD, OPTIONS\r\nLocation: ...'
答案 1 :(得分:2)
如果有人遇到同样的问题。打印或返回Location标头的代码是:
# url, just set your endpoint here
# data, just set the data that you will request here
response = self.client.post(url, data)
response["Location"]
来源:https://github.com/tomchristie/django-rest-framework/issues/4301#issuecomment-235224120