Djangoのテストクライアントの使い方

DjangoにはWebアプリケーションテスト用の「django.test.client.Client」というモジュールがあります。これを使うと任意のHttpRequestに対して、擬似的なWebServerを介してHttpResponseを取得することができます。このHttpResponseはアプリケーションサーバ上使用するものとは違い、「context」など、幾つかのテスト用のプロパティが用意されています。

例)

--- views.py ---

def test(request):
    return render_to_response(‘test/test.html', {"str": u"CLIENTTEST"})
--- manage.py shell ---

from django.test import Client
from django.test import utils
utils.setup_test_environment()
client = Client()
res = client.get("/test")
"STATUS_CODE: " + str(res.status_code)  # Output 200
"CONTENT: " + res.content
"TEMPLATE_NAME: " + res.template.name if res.template else u"None"  # Output test/test.html
"CONTEXT: " + str(res.context)  # Output CONTEXT: [{‘str': u'CLIENTTEST'}]
"STR: " + str(res.context["str"])  # Output CLIENTTEST

※ ドキュメント(Django | Testing Django applications | Django documentation)には記載されていないませんが、「django.test.utils.setup_test_environment」関数を呼ばないと、「template」や「context」が返ってきませんでした。(参考: #3051 (django.test.client.Client() does not set HttpResponse context and template properly) - Django)

この記事が役に立った場合、シェアしていただけると励みになります!!