我正在爲我的項目開發一個TestCase,涉及一些Image和FileFields。一些對象被加載了燈具,一些對象在測試過程中被創建。我用InMemoryUploadedFile模擬了我的圖像。Django Test mocked ImageField在測試後阻止上傳或清理
創建新測試對象時,模擬圖像正在上傳 到MEDIA_ROOT目錄中upload_to方法中定義的正確位置。
這些模擬圖像實際上是在測試過程中本地存儲的。有很多關於的信息如何模擬圖像。但是我無法真正找到一些關於在測試之後清理這些上傳的好消息。
問題:
,以防止有從實際被上傳這些文件的可能性,或者這是不可能的/ DIS-鼓勵?
或
如果這些文件有利於測試的上載(如果是這樣,爲什麼?),和拆卸過程中事後清理?那麼清理這些上傳文件的適當方法是什麼?
我正在處理的當前情況的一些代碼,裁剪到適合問題的大小。我並不是在尋找一個完整的樣本,而只是朝着正確的方向前進。提前感謝您的時間。
八分型號:
def project_image_upload_location(instance, filename):
return 'uploads/projects/images/%s' % \
services.unique_filename(filename)
class ProjectImage(models.Model):
project = models.ForeignKey(
'projects.Project')
name = models.CharField(
_("Image name"),
max_length=35)
image = models.ImageField(
_("Project image"),
upload_to=project_image_upload_location,
width_field='image_width',
height_field='image_height')
image_width = models.IntegerField(
default=0)
image_height = models.IntegerField(
default=0)
八分測試用例:
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.test import TestCase
from PIL import Image
import StringIO
from projects.models import ProjectImage
from projects import services
class ProjectsTest(TestCase):
fixtures = ['projects']
def _create_project_image(self, project, name):
return ProjectImage.objects.create(
project=project,
name=name,
description="Description",
image=self._create_mock_image(name="Mocked Image"),
is_primary=True,
is_published=True)
def _get_project_image(self, name):
return ProjectImage.objects.get(name=name)
def _create_mock_image(self, name):
name = name + '.jpg'
io = StringIO.StringIO()
size = (200,200)
color = (255,0,0)
image = Image.new("RGB", size, color)
image.save(io, format='JPEG')
image_file = InMemoryUploadedFile(io, None, name, 'jpeg', io.len, None)
image_file.seek(0)
return image_file
def test_update_project_set_updated_datetime(self):
project = self._get_project("Project B")
self.assertEqual(project.updated_datetime, None)
project.save()
self.assertTrue(isinstance(project.updated_datetime, datetime))