Имитация исправления вызываемого upload_to в Django ImageField
В Django у меня есть модель и тест, похожие на следующие, оба в photos
модуле (Django app).
models.py
def get_user_photo_path(instance, filename):
return str(uuid.uuid4())
class UserPhoto(models.Model):
uploader = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to=get_user_photo_path)
upload_timestamp = models.DateTimeField(auto_now_add=True)
tests.py
@mock.patch('photos.models.get_user_photo_path')
def test_image_upload_path(self, mock_photo_path):
mock_photo_path.return_value = 'mocktest'
user_photo = UserPhoto.objects.create(
uploader=self.parking_user, # these self variables are defined in setUp()
image=self.image
)
expected_path = 'mocktest'
self.assertTrue(user_photo.image.name.endswith(expected_path)) # Assertion fails
# For demonstration, this assertion DOES pass
from .models import get_user_photo_path
self.assertEquals(get_user_photo_path(), 'mocktest')
Это не работает, и я не уверен, почему. Но если я импортирую функцию get_user_photo_path
непосредственно в тест и вызываю ее, то она возвращает обратно 'mocktest'
. Я могу только предположить, что это как-то связано с тем, как ImageField обрабатывает свои аргументы, но из исходного кода ничего не выделяется как особенно странное или необычное.
Я обошел эту проблему, установив вместо нее патч photos.models.uuid.uuid4
, но если кто-нибудь сможет объяснить, почему вышеупомянутый патч не работает, я буду очень благодарен!