Тестирование моделей с FileField/ImageField в Django

Оказалось, что тестирование моделей с файлом (поле FileField) или картинкой (поле ImageField) в Django не так уж очевидно. Допустим, у нас есть модель:

class MagicPony(models.Model):
  photo = models.ImageField(_('Photo'), upload_to='uploads/ponies')

При загрузке файла через HTML-форму проблем не возникает, но, чтобы загрузить изображение с диска, нужно дополнительно обернуть наш файл в объект File:

from django.core.files import File

class PonyTest(TestCase):
  def test_magic_power(self):
    file = open('pony.jpg', 'rb')
    file = File(file)
    pony = MagicPony.objects.create(photo=file)

    # Теперь можно писать любые проверки (наличие магической силы,
    # количество копыт и т. п.)