Я пытаюсь написать тест, который проверяет 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 с «пустым» запросом?