6

一般的なクラスベースのビューから返された HTML を検証するテストを作成しようとしています。テンプレートを単純にレンダリングする関数ベースのビューがあるとします。

# views.py
from django.shortcuts import render

def simple_view(request, template='template.html'):
    return render(request, template)

これで、テスト中に次のことができます。

# tests.py
from django.http import HttpRequest
from .views import simple_view

request = HttpRequest()
response = simple_view(request)

で検証を行いresponseます。上記を TemplateView から継承するクラスベースのビューに変換したいと思います。

# views.py
from django.views.generic import TemplateView

class SimpleView(TemplateView):
    template_name = 'template.html'

基本的に同じテスト方法が失敗するようになりました。

# tests.py
from django.http import HttpRequest
from .views import SimpleView

request = HttpRequest()
view_func = SimpleView.as_view()
response = view_func(request).render()

結果は

Traceback (most recent call last):
    File "tests.py", line 30, in test_home_page_returns_correct_html
response = view_func(request).render()
    File "lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
    File "lib/python2.7/site-packages/django/views/generic/base.py", line 82, in dispatch
if request.method.lower() in self.http_method_names:
AttributeError: 'NoneType' object has no attribute 'lower'

request.method手動で に設定しようとしましGETたが、 にないという別のエラーが表示sessionされrequestます。

「空の」リクエストで TemplateView からレスポンスを取得する方法はありますか?

4

2 に答える 2