3
我試圖找到一種方法,當使用Django和sorl-thumbnail
的get_thumbnail()
方法時如何測試縮略圖生成。Django + solr.thumbnail:get_thumbnail()在測試環境中失敗
環境:
Django==1.5.5
Pillow==2.1.0
sorl-thumbnail==11.12
被測
簡化代碼(在測試環境中運行):
from StringIO import StringIO
from PIL import Image
from django.conf import settings
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.db import models
from sorl.thumbnail import get_thumbnail
# simple class with ImageField
class User(models.Model):
avatar = models.ImageField(upload_to='avatars', default=None, null=True, blank=True)
def get_thumbnail_uri(self):
avatar_thumbnail = get_thumbnail(self.avatar, '100x100')
return avatar_thumbnail.url
# make sure we're using in-memory test env.
assert settings.THUMBNAIL_STORAGE == 'inmemorystorage.InMemoryStorage'
assert settings.DEFAULT_FILE_STORAGE == 'inmemorystorage.InMemoryStorage'
# prepare image
fake_file = StringIO()
picture = Image.new(mode='RGBA', size=(500, 500), color=(255, 0, 0, 0))
picture.save(fake_file, 'JPEG')
fake_file.name = 'test.jpg'
fake_file.seek(0)
uploaded_image = InMemoryUploadedFile(fake_file, field_name=None, name='test.jpg',
content_type='image/jpeg', size=fake_file.len,
charset=None)
# add image to user
u = User()
u.avatar = uploaded_image
assert u.get_thumbnail_uri() is not None
上面總是失敗,在最後一行:
Traceback (most recent call last):
File "/vagrant/path/to/file.py", line 1440, in test_stackprep
assert u.get_thumbnail_uri() is not None
File "/vagrant/path/to/file.py", line 1413, in get_thumbnail_uri
avatar_thumbnail = get_thumbnail(self.avatar, '100x100')
File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail
return default.backend.get_thumbnail(file_, geometry_string, **options)
File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 56, in get_thumbnail
source_image = default.engine.get_image(source)
File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", line 13, in get_image
return Image.open(buf)
File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/PIL/Image.py", line 2008, in open
raise IOError("cannot identify image file")
IOError: cannot identify image file
我認爲運行測試時,Django或者sorl-thumbnail會跳出inmemorystorage
。我已經在很長一段時間了,但我沒有找到任何可行的配置,除了直接在文件系統上測試東西(我想避免這種情況)。
有沒有人設法得到sorl的get_thumbnail()
方法在測試中工作?
謝謝。