我正在尝试在我的视图集上测试我的更新方法。视图集是取自drf的模型视图集。要更新我需要发送一个put请求。由于并不总是支持这两种方法告诉服务器我正在发出一个put请求,第一种不符合我需要的方法是使用一个额外的字段来形成一个名为_method
并将其设置为{{1 }}。由于我需要发布json数据,我需要使用第二种方式,它使用put
标题。
要在测试用例中发布我的数据,请使用以下代码:
X-HTTP-Method-Override
但不幸的是,我得到的结果是header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
。我使用插件(Postman)测试了服务器的行为,我也指定了{'detail':'Method POST not allowed.'}
标头。没有例外。我现在需要知道如何正确地将标头传递给django测试客户端,否则测试会在这里变得非常烦人。
答案 0 :(得分:21)
您需要将标头指定为String source="{\"query\":\"ether_stat_s\"}";
SearchResponse response = client.prepareSearch("cn_*")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom(0).setSize(10).setExplain(true)
.setPostFilter(FilterBuilders.rangeFilter("@timestamp").from(TIMESTAMP_FROM).to(TIMESTAMP_TO)).**setSource(source).**execute().actionGet();
而不是'HTTP_X_HTTP_METHOD_OVERRIDE'
,即在标头的开头添加'X_HTTP_METHOD_OVERRIDE'
。
HTTP_
请求中的HTTP标头通过转换转换为
header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'} response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
个密钥 所有字符都为大写,用下划线替换任何连字符 并在名称中添加META
前缀。所以,例如,标题 被叫HTTP_
的广告将映射到X-Bender
密钥META
。
答案 1 :(得分:1)
此外,您可以将标头传递给客户端的构造函数:
from django.test import Client
client = Client(HTTP_USER_AGENT="Mozilla/5.0 ...", HTTP_X_USER_ID="982734")
这样,每个请求都将包含默认标头。
PS :此方法对DRF TestApiClient和ApiRequestFactory有效。