Я использую pytest-django для тестирования некоторых представлений Django.
Я хочу проверить, что контекст ответа содержит определенные значения, но всегда None
.
Мой взгляд:
from django.views.generic import TemplateView
class MyView(TemplateView):
template_name = 'my_template.html'
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['hello'] = 'hi'
return context
Мой тест:
def test_context(client):
response = client.get('/test/')
print('status', response.status_code)
print('content', response.content)
print('context', response.context)
Если я запускаю это с флагом -s
, чтобы увидеть операторы печати, код состояния будет 200
, а content
будет содержать отображаемый шаблон, включая "hi"
, который находится в контексте. Но context
это None
.
Я думал, что это client
было таким же, как django.test .Client, который должен позволить мне видеть контекст... так что же мне не хватает?
Я пробовал этот ответ, но получил
RuntimeError: setup_test_environment() уже был вызван и не может быть вызван снова без предварительного вызова teardown_test_environment().
from django.core.urlresolvers import reverse
. - person Aipi   schedule 10.08.2017reverse()
в тестах и попробовал это здесь с тем же эффектом, я просто максимально упростил ситуацию, чтобы попытаться найти проблему. - person Phil Gyford   schedule 10.08.2017django.test import TestCase
и создать класс, который наследует this, а этот метод наследуетtest_context(self)
. Потому что, видимо, этот метод в порядке. Я не знаю, как вы передаете клиенту это. - person Aipi   schedule 10.08.2017client
. - person Phil Gyford   schedule 10.08.2017client.login()
, потому что для моего представления требовался аутентифицированный пользователь. Это не решение в вашем случае, потому что шаблон отображается, поэтому я создал небольшой проект Django, чтобы выяснить, в чем может быть проблема. Я использовал Python 3.7, Django 3.0, pytest 5.4.3 и pytest-django 3.9.0. По крайней мере, в этих версияхresponse.context['hello']
было"hi"
, как и ожидалось. Я могу предоставить код, если вы все еще заинтересованы. - person mcrot   schedule 18.06.2020