У меня есть модульный тест, который терпит неудачу в утверждении, которое проходит в другом тесте в том же классе тестовых случаев.
Вот прохождение теста:
def test_home(self):
c = Client()
resp = c.get('/')
self.assertEqual(resp.status_code, 200)
self.assertTrue('a_formset' in resp.context)
Вот неудачный тест:
def test_number_initial_number_of_forms(self):
c = Client()
resp = c.get('/')
self.assertEqual(resp.context['a_formset'].total_form_count(), 1)
Во втором тесте получаю ошибку TypeError: 'NoneType' object has no attribute '__getitem__'
.
Если я выполню второй тест как
def test_number_initial_number_of_forms(self):
c = Client()
resp = c.get('/')
self.assertTrue('a_formset' in resp.context)
self.assertEqual(resp.context['a_formset'].total_form_count(), 1)
Я получаю ошибку TypeError: argument of type 'NoneType' is not iterable
. Я подтвердил с помощью операторов печати во втором тесте, что response.content содержит страницу, которую я ожидаю получить, что код состояния правильный и что шаблон правильный. Но контекст ответа постоянно None
во втором тесте.
Я запускаю свои модульные тесты Django через стандартный интерфейс "python manage.py test...", поэтому я не верю, что сталкиваюсь с "контекст пуст из оболочки".
Что происходит с этим?
Изменить:
Если я добавлю print type(resp.context['a_formset'])
к каждому тесту, для рабочего теста я получу <class 'django.forms.formsets.AFormFormSet'>
. Для нерабочего теста я снова получаю TypeError: 'NoneType' object has no attribute '__getitem__'
.
print type(resp.context['a_formset'])
. Возможно, вы получите не то, что ожидаете. - person Evan Porter   schedule 18.01.2013