Ошибка предварительной фиксации Python unittest

Хочу pre-commit для запуска тестов перед фиксацией моего кода.
Командаpython -m unittest discover работает в командной строке.

D:\project_dir>python -m unittest discover
...
...
...
----------------------------------------------------------------------
Ran 5 tests in 6.743s

OK

Но при попытке совершить я получаю

D:\project_dir>git commit -m "fix tests with hook"
run tests................................................................Failed
hookid: tests

usage: python.exe -m unittest discover [-h] [-v] [-q] [--locals] [-f] [-c]
                                       [-b] [-k TESTNAMEPATTERNS] [-s START]
                                       [-p PATTERN] [-t TOP]
python.exe -m unittest discover: error: unrecognized arguments: bigpipe_response/processors_manager.py
usage: python.exe -m unittest discover [-h] [-v] [-q] [--locals] [-f] [-c]
                                       [-b] [-k TESTNAMEPATTERNS] [-s START]
                                       [-p PATTERN] [-t TOP]
python.exe -m unittest discover: error: unrecognized arguments: tests/test_processors.py

Вот мой .pre-commit-config.yaml файл.

-   repo: local
    hooks:
    -   id: tests
        name: run tests
        entry: python -m unittest discover
        language: python
        types: [python]
        stages: [commit]

Также для языка я стараюсь использовать system. Получил тот же результат.

Как я могу это решить? Пожалуйста помоги.

2 ответа

Решение

Вы можете попробовать следующий YAML. Конечно, вы должны изменить узор вargs вариант, если вы используете другой.

-   id: unittest
    name: unittest
    entry: python -m unittest discover 
    language: python
    'types': [python]
    args: ["-p '*test.py'"] # Probably this option is absolutely not needed.
    pass_filenames: false
    stages: [commit]

Вы должны установить false в pass_filenames параметр, потому что в другом случае файлы будут переданы в качестве аргументов, и, как вы упомянули в своем вопросе, это "нераспознанные" параметры.

Принятый ответ не будет работать, если ваше приложение зависит от некоторых пакетов. В этом случае language:pythonнастройка позволяет предварительно использовать пользовательскую виртуальную среду (в ~/.cacheпапка), что вы можете добавить зависимости с помощью additional-dependenciesфлаг. Однако обычно это означает копирование содержимого файла «requirements.txt».

Итак, чтобы использовать виртуальную среду вашего приложения, вы должны установить language:systemнастройки и поместите свои тесты в repo: local. Затем используется виртуальная среда, которая активируется при запуске перехватчиков предварительной фиксации.

Рабочая конфигурация будет выглядеть так:

      - repo: local
    hooks:
      - id: unittests
        name: run unit tests
        entry: python -m unittest
        language: system
        pass_filenames: false
        args: ["discover"]
Другие вопросы по тегам