Ich arbeite an einem Testfall für mein Projekt, mit einigen Image und FileFields. Einige Objekte werden mit Fixtures geladen, einige Objekte werden während der Tests erstellt. Ich verspottete mein Bild mit einer InMemoryUploadedFile.Django Test verspottet ImageField verhindert Upload oder Säuberung nach Tests
Beim Erstellen eines neuen Testobjekts wird das gespiegelte Bild in das Verzeichnis MEDIA_ROOT an der korrekten Position hochgeladen, die in der upload_to-Methode definiert ist, .
Diese gespotteten Bilder werden während der Tests tatsächlich lokal gespeichert. Es gibt ziemlich viele Informationen über , wie man ein Bild vortäuscht. Aber ich konnte nicht wirklich gute Informationen über das Aufräumen dieser Uploads nach den Tests finden.
Frage:
Gibt es eine Möglichkeit, diese Dateien von tatsächlich werden Hochladen zu verhindern, oder ist dies unmöglich/dis-ermutigt?
oder
Sollten diese Dateien, die für die Tests hochgeladen (wenn ja, warum?), Und danach während der tearDown gereinigt? Und was wäre ein geeigneter Weg, um diese hochgeladenen Dateien zu bereinigen?
Einige Code der aktuellen Situation, mit der ich arbeite, zugeschnitten auf die Größe, um die Frage zu passen. Ich suche kein voll ausgearbeitetes Sample, sondern nur einen Schub in die richtige Richtung. Vielen Dank für Ihre Zeit im Voraus.
Geerntete Modell:
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)
Geerntete Testcase:
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))