使用django-minio-backend时,测试文件上传至旧存储桶的问题解决
解决Django测试中Minio存储桶不切换的问题
问题出在Django的文件存储类是懒加载的单例实例,项目(包括测试)启动时会缓存已初始化的存储对象,你修改settings后并没有让存储类重新读取新配置,导致依然使用旧桶。
解决方案:修改测试执行器,清除存储类缓存
在更新settings配置后,强制重置默认存储的缓存实例,让它重新根据新配置初始化Minio存储后端:
from django.core.files.storage import default_storage from django.test.runner import DiscoverRunner from django.core.management import call_command from django.conf import settings class CoreTestRunner(DiscoverRunner): def setup_test_environment(self, **kwargs): super().setup_test_environment(**kwargs) self._make_test_file_storage() def _make_test_file_storage(self): minio_test_bucket = "test-bucket" # 更新Minio桶配置 settings.MINIO_MEDIA_FILES_BUCKET = minio_test_bucket settings.MINIO_PRIVATE_BUCKETS = [minio_test_bucket] # 清除默认存储的缓存实例,强制重新初始化 if hasattr(default_storage, '_wrapped'): del default_storage._wrapped # 初始化测试桶 call_command("initialize_buckets")
额外注意事项
- 如果你的模型中显式指定了存储类实例(比如
FileField(storage=MinioMediaStorage())),需要在测试用例中重新实例化存储类,或者改用default_storage来处理文件上传。 - 建议在
teardown_test_environment方法中添加测试桶的清理逻辑,避免残留测试资源。
内容的提问来源于stack exchange,提问作者msln
相关产品推荐
相关产品推荐

