Python 预提交单元测试失败
Python pre-commit unittest faild
我希望 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
。我得到了相同的结果。
我该如何解决这个问题?请帮忙。
你可以试试下面的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]
您应该将 pass_filenames
参数设置为 false
,因为在其他情况下,文件将作为参数传递,正如您在问题中提到的,这些是 "unrecognized" 参数。
如果您的应用程序依赖于某些包,则接受的答案将不起作用。在这种情况下,language:python
设置允许 pre-commit 使用自定义虚拟环境(在 ~/.cache
文件夹中),您可以使用 additional-dependencies
标志添加依赖项。然而,这通常意味着复制 'requirements.txt`
的内容
因此,为了使用您的应用程序的虚拟环境,您必须设置 language:system
设置并将您的测试放入 repo: local
。然后使用 运行 pre-commit 钩子时激活的虚拟环境。
工作配置如下所示:
- repo: local
hooks:
- id: unittests
name: run unit tests
entry: python -m unittest
language: system
pass_filenames: false
args: ["discover"]
我希望 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
。我得到了相同的结果。
我该如何解决这个问题?请帮忙。
你可以试试下面的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]
您应该将 pass_filenames
参数设置为 false
,因为在其他情况下,文件将作为参数传递,正如您在问题中提到的,这些是 "unrecognized" 参数。
如果您的应用程序依赖于某些包,则接受的答案将不起作用。在这种情况下,language:python
设置允许 pre-commit 使用自定义虚拟环境(在 ~/.cache
文件夹中),您可以使用 additional-dependencies
标志添加依赖项。然而,这通常意味着复制 'requirements.txt`
因此,为了使用您的应用程序的虚拟环境,您必须设置 language:system
设置并将您的测试放入 repo: local
。然后使用 运行 pre-commit 钩子时激活的虚拟环境。
工作配置如下所示:
- repo: local
hooks:
- id: unittests
name: run unit tests
entry: python -m unittest
language: system
pass_filenames: false
args: ["discover"]