2013-12-11 127 views
3

我試圖找到一種方法,當使用Django和sorl-thumbnailget_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()方法在測試中工作?

謝謝。

回答

3

版本11.12是PyPI今天的最新版本,已有2年的歷史。在回購中有版本12.0,這應該可以工作。它不在PyPI上,因爲有change of maintainers,我想他們還沒有機會這樣做。

我試過主版本,它可以與你的例子一起工作。