私のPythonプロジェクトでは、フックpytest
として使用しています。pre-commit
一部のテストでは、一時ファイルを作成および削除しますが、実行するとすべて正常に動作しますpytest <test directory>
。ただし、トリガーを実行git commit
してpre-commit
フックするpytest
と、 が原因で一部のテストが失敗しFileNotFoundError: [Errno 2] No such file or directory: '<file name>'
ます。これは、多くのファイルが変更されてステージング領域にある場合に発生する印象があります (1 ~ 2 個のファイルでは、この問題は見られません)。これが私のpytest
セクションです.pre-commit-config.yaml
:
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: bash -c 'pytest'
language: system
出力は次のようになります。
pytest-check.............................................................Failed
- hook id: pytest-check
- exit code: 1
tests/utils/test_application.py F [ 91%]
tests/utils/test_image_io.py .FFF......... [100%]
==================================== ERRORS ====================================
_ ERROR at teardown of test_calling_with_nonexisting_parameter[--non_existing 1337-hm] _
def teardown_module() -> None:
> os.remove(OUTPUT_FILE)
E FileNotFoundError: [Errno 2] No such file or directory: 'output.png'
tests/bdd/step_defs/test_runner_steps.py:98: FileNotFoundError
コンソールから pytest を実行すると、これは発生しません。
でpass_filenames: false
、always_run: true
エラーは表示されなくなりました。
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: pytest
language: system
pass_filenames: false
always_run: true
物事をbashでラップすることに関して、私はまだこれをやっていますpylint
:
- repo: local
hooks:
- id: pylint-check
name: pylint-check
entry: bash -c 'find . -name "*.py" | xargs pylint'
language: system
types: [python]
pass_filenames: false
always_run: true
これに対するより良い解決策はありますか?pylint
無制限の深さの再帰をサポートしていないため、bash コマンドが必要です。
ありがとう!
ベスト、アレクセイ