ビューセットで更新メソッドをテストしようとしています。ビューセットは、drfから取得したモデルビューセットです。更新するには、プットリクエストを送信する必要があります。これは常にサポートされているわけではないため、プットリクエストを行っていることをサーバーに伝える方法は2つあります。最初の方法は、追加のフィールドを使用して_method
というフォームを作成し、それをput
。 jsonデータを投稿する必要があるため、X-HTTP-Method-Override
ヘッダーを使用する2番目の方法を使用する必要があります。
テストケースにデータを投稿するには、次のコードを使用します。
header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
しかし、残念ながら、私が得た結果は{'detail':'Method POST not allowed.'}
です。アドオン( Postman )を使用してサーバーの動作をテストしました。ここで、X-HTTP-Method-Override
ヘッダーも指定しました。例外は発生しません。ヘッダーをDjangoテストクライアントに正しく渡す方法を知る必要があります。そうしないと、テストがここで非常に煩わしくなります。
ヘッダーを'HTTP_X_HTTP_METHOD_OVERRIDE'
ではなく'X_HTTP_METHOD_OVERRIDE'
として指定する必要があります。つまり、ヘッダーの先頭にHTTP_
を追加します。
header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
リクエストのHTTPヘッダーは、すべての文字を大文字に変換し、ハイフンをアンダースコアに置き換え、名前に
HTTP_
プレフィックスを追加することで、META
キーに変換されます。したがって、たとえば、X-Bender
というヘッダーはMETA
キーHTTP_X_BENDER
にマップされます。
また、クライアントのコンストラクターにヘッダーを渡すこともできます。
from Django.test import Client
client = Client(HTTP_USER_AGENT="Mozilla/5.0 ...", HTTP_X_USER_ID="982734")
このように、すべてのリクエストにはデフォルトのヘッダーが含まれます。
[〜#〜] ps [〜#〜]:このアプローチは、DRFTestApiClientおよびApiRequestFactoryに有効です。