У меня странная проблема в тесте шаблона Django. Когда тест выполняет мое представление, представление возвращает объект HttpResponse. Однако, когда я передаю этот объект ответа методу assertCasetains Django TestCase, объект ответа становится строкой. Поскольку эта строка не имеет атрибута 'status_code', как это делает объект ответа, тест терпит неудачу. Вот мой код:Объект HttpResponse становится строкой при передаче в assertContains
template_tests.py
from django.test import TestCase
from django.test.client import RequestFactory
class TestUploadMainPhotoTemplate(TestCase):
def setUp(self):
self.factory = RequestFactory()
def test_user_selects_non_jpeg_photo_file(self):
"""
User is trying to upload a photo file via a form
with an ImageField. However, the file doesn't have
a '.jpg' extension so the form's is_valid function, which
I've overridden, flags this as an error and returns False.
"""
with open('photo.png') as test_photo:
request = self.factory.post(reverse('upload-photo'),
{'upload_photo': '[Upload Photo]',
'photo': test_photo})
kwargs = {'template': 'upload_photo.html'}
response = upload_photo(request, **kwargs)
# pdb.set_trace()
self.assertContains(response, 'Error: photo file must be a JPEG file')
Когда я запускаю этот код в отладчике и делать «типа (ответ)», прежде чем я называю assertContains, я могу видеть, что «ответ» является объектом HttpResponse , Однако, когда assertContains называется, я получаю эту ошибку:
Я установил дополнительный останова в методе assertContains на месте .../Джанго/тест/testcases.py: 638:
self.assertEqual(response.status_code, status_code...
В этот момент, когда я снова нахожу «type (response)», я вижу, что он стал строковым объектом и не имеет атрибута status_code. Может ли кто-нибудь объяснить, что происходит? Я использовал этот же тестовый шаблон успешно в десятке других тестов шаблонов, и он работал во всех них. Может ли это иметь какое-то отношение к тому, что этот тест включает в себя загрузку файла?
Спасибо.