Django Pytest загрузка изображений модульный тест
Я использую Django 3.2.6, django-pytest и factory boy для запуска автоматизированных тестов.
Вот функция, которую я использую для создания тестового изображения:
from django.core.files.uploadedfile import SimpleUploadedFile
def test_image(name='test.jpg', size=(250,250)):
img = Image.new('RGB', size)
content = img.tobytes()
# return Django file for testing in forms and serializers
return SimpleUploadedFile(name, content=content, content_type='image/jpeg')
Это тестируемое представление:
class PhotoCreateView(LoginRequiredMixin, CreateView):
model = Photo
form_class = PhotoForm
success_url = '/'
template_name = 'photos/create.html'
def form_valid(self, form):
new_category = form.cleaned_data['new_category']
if new_category:
category = Category.objects.create(name=new_category)
form.instance.category = category
return super().form_valid(form)
Вот тестовый класс:
class TestPhotoCreateView:
url = reverse('photos:create')
def test_photo_create_view_authenticated_user_can_access(self, client, user):
client.force_login(user)
response = client.get(self.url)
assert response.status_code == 200
def test_photo_create_view_unauthenticated_user_cannot_access(self, client):
response = client.get(self.url)
assert response.status_code == 302
def test_photo_create_view_form_valid_existing_category(self, client, user):
client.force_login(user)
for _ in range(3):
CategoryFactory()
category = CategoryFactory()
image = test_image()
form_data = {
'category': category.pk,
'new_category': '',
'description': 'hello world',
'image': image,
}
response = client.post(self.url, form_data)
print(response.content)
photo = Photo.objects.get(description=form_data['description'])
assert photo.category == form_data['category']
Все тесты прошли, кроме test_photo_create_view_form_valid_existing_category
.
Я запустил pytest --capture=tee-sys
и эта ошибка была в поле изображения:
<p id="error_1_id_image" class="invalid-feedback"><strong>Upload a valid image. The file you uploaded was either not an image or a corrupted image.</strong></p>
Весь код для этого проекта находится здесь: https://github.com/leigh-data/photo_gallery