Django - как изменить путь загрузки FileField_to во время тестирования

Я пишу контрольный пример для модели Django с FileField. Я хотел бы изменить путь загрузки, чтобы тесты не имели побочных эффектов для остальной системы.

Я попытался передать вызываемый объект в upload_to и установить его в тестах:

#models.py
upload_path = lambda x, y: 'files'
class Model(models.Model):
    file = models.FileField(upload_to=upload_path)

#tests.py
test_path = mock.Mock()
test_path.return_value = 'files/test'
@mock.patch('models.upload_path', new=test_path)
class ModelTest(object):
    ...

Однако это, похоже, не работает, и я считаю, что причина в том, что FileField разыменовывает upload_path до запуска любого тестового кода, поэтому уже слишком поздно исправлять ошибки.

Как я могу изменить тестовый код, что такое upload_to? В противном случае, как модель может проверить, запускается ли она тестом?

4 голоса | спросил dgirardi 4 72012vEurope/Moscow11bEurope/MoscowSun, 04 Nov 2012 15:07:35 +0400 2012, 15:07:35

1 ответ


0

Я думаю, что вы почти у цели, но чтобы получить позднюю оценку, которую вы хотите, вам нужно указать file_path в качестве переменной, которую вы хотите исправить, а затем использовать лямбду для отсрочки привязки:

#models.py
upload_path = 'files'
class Model(models.Model):
    file = models.FileField(upload_to=lambda x,y: upload_path)

#tests.py
@mock.patch('models.upload_path', 'files/test')
class ModelTest(object):
    ...
ответил hwjp 4 72012vEurope/Moscow11bEurope/MoscowSun, 04 Nov 2012 18:09:33 +0400 2012, 18:09:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132