In my current project, I create PDF files from Jinja2/LaTeX templates. In each test run, several PDFs are created and saved to disk. How do you test this without filling up the hard drive?
I use an in-memory data storage. For Django there is a package that makes it really easy: dj-inmemorystorage.
A non-persistent in-memory data storage backend for Django.
Using pytest fixtures:
# tests/conftest.py import pytest import inmemorystorage from django.conf import settings @pytest.fixture def in_memory(): settings.DEFAULT_FILE_STORAGE = 'inmemorystorage.InMemoryStorage'
That's it. When using this
in_memory fixture in a test function, the files will never be written on disk.
It's actually much easier than this. I now configure the in-memory file storage directly in the Django configuration file that pytest uses.
# config/settings/testing.py """Django configuration for testing and CI environments.""" from .common import * # Use in-memory file storage DEFAULT_FILE_STORAGE = 'inmemorystorage.InMemoryStorage'