运行测试时,我想创建然后删除一些资源。访问目标服务器需要使用令牌进行身份验证。
from django.test import TestCase
from rest_framework.test import APIClient
(...)
class MyTest(TestCase):
def setUp(self):
self.client = APIClient()
def test_creation_and_deletion(self):
payload = {"key": "value"}
# This works, but it's handled by a custom create() method from views.py:
res = self.client.post(<url>, payload)
(...)
# This doesn't work, no custom delete() method is defined anywhere:
tar_headers = {"private-token": "<token>"}
res2 = self.client.delete(res.data["target_resource_url"], headers=tar_headers)
# Either this doesn't work:
self.client.headers.update(tar_headers)
res3 = self.client.delete(res.data["target_resource_url"])
打印res2
输出如下:
<HttpResponseNotFound status_code=404, "text/html">
调用res3
产生错误:
AttributeError: 'APIClient' object has no attribute 'headers'
target_resource_url
只要标头中给出令牌,从例如Postman发送的删除请求就可以正常工作。
如何解决这个问题?
显然,Private-Token
在通过要求删除时,无法通过身份验证APIClient()
。但是,requests
可以使用良好的旧库:
import requests
HEADERS = {'PRIVATE-TOKEN': <TOKEN>}
res = ...
if "api_link" in res.data:
requests.delete(res.data["api_link"], headers=HEADERS)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句