@Lepilov

Pytest: как замокать переменную метода?

Есть джанговская manager command в которой обабатывается csv файл.
app/my_app/my_command.py
class Command(BaseCommand):
    def handle(self,  *args, **options):
        path = (os.path.join(os.path.abspath(os.path.dirname(__name__)), 'data.csv'))
        # остальная логика


Пишу под нее тест на pytest, проблема в том что не могу понять как замокать переменную path чтобы тест обращался не к реальному data.csv а временному тестовому файлу

@pytest.fixture
def create_test_csv_file(tmpdir_factory):
    # логка по созданию и заполнению тестового файла
    # фикстура возвращает путь к тестовому файлу
    return str(path)

@pytest.mark.django_db
def test_function(mocker, create_test_csv_file):
   # здесь как то надо замокать path 
   что то типа mock_path =  create_test_csv_file
    call_command('my_command')
  • Вопрос задан
  • 451 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Lepilov Автор вопроса
Михаил спасибо за помощь. Похоже всетаки придется менять manager command. Сейчас остановился на таком решении через дополнительную переменную с дефолтным значением, возможно кому-то пригодится
class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument(
            "--path",
            dest="path",
            default=os.path.join(os.path.abspath(os.path.dirname(__name__)), 'data.csv')
        )

    def handle(self, *args, **options):
        path = options.get("path")
        ...

Вызов в тесте
call_command('my_command', path=create_test_csv_file)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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