Pytestテストの検出に失敗しました。 UIの状態:
Test discovery error, please check the configuration settings for the tests
出力ウィンドウの状態:
Test Discovery failed:
Error: Traceback (most recent call last):
File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\run_adapter.py", line 16, in <module>
main(tool, cmd, subargs, toolargs)
File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\adapter\__main__.py", line 90, in main
parents, result = run(toolargs, **subargs)
File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\adapter\pytest.py", line 43, in discover
raise Exception('pytest discovery failed (exit code {})'.format(ec))
Exception: pytest discovery failed (exit code 3)
これが私の設定です:
{
"python.pythonPath": ".venv\\Scripts\\python.exe",
"python.testing.pyTestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pyTestEnabled": true
}
コマンドラインからpytestを正常にFWIW実行できます。
これは、12要素のアプリの一般的な構成であるため、プロジェクトの環境設定に.env
ファイルを使用するユーザーに影響を与える可能性があるため、ここに回答を追加すると思いました。
私の例では、仮想環境の管理にpipenv
を使用しており、プロジェクトのルートディレクトリに.env
ファイルがあることを前提としています。
私のvscodeワークスペース設定jsonファイルは以下のようになります。ここで私にとって重要なのは"python.envFile": "${workspaceFolder}/.env",
でした
{
"python.pythonPath": ".venv/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.pycodestyleEnabled": false,
"python.linting.flake8Enabled": false,
"python.linting.pylintPath": ".venv/bin/pylint",
"python.linting.pylintArgs": [
"--load-plugins=pylint_Django",
],
"python.formatting.provider": "black",
"python.formatting.blackArgs": [
"--line-length",
"100"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true,
"python.testing.pytestPath": ".venv/bin/pytest",
"python.envFile": "${workspaceFolder}/.env",
"python.testing.pytestArgs": [
"--no-cov"
],
}
これが誰かが私がこれを理解するのに費やした時間を節約することを願っています。
私は同じ問題を抱えており、pytest.ini
ファイル。そのファイルからaddopts
のほとんどを削除すると、問題が解決しました。
https://docs.pytest.org/en/latest/usage.html#possible-exit-codes を見ると、pytest自体が内部エラーに陥っているようです。
私のケースでは、次のエラーが表示されます:テスト検出が失敗しました:SyntaxError:位置0のJSONで予期しないトークンR
これをどのように処理するのですか?
Python Test Explorer for VSC extensionも試してみましたが、これは正常に機能しますが、組み込みのテスト検出がエラーで失敗します。
python拡張バージョンは2020.3.71659です
テストの検出を開始する前に、python.testing.cwd
がテストディレクトリを正しく指し、python.testing.pytestEnabled
がtrue
に設定されていることを確認してください。
これらの要件が正しく設定されたら、テスト検出とその出力を実行します([〜#〜] output [〜#〜]ウィンドウを参照)。次のようなものが表示されます。
python $HOME/.vscode/extensions/ms-python.python-$VERSION/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir $ROOT_DIR_OF_YOUR_PROJECT -s --cache-clear
Test Discovery failed:
Error: ============================= test session starts ==============================
<SETTINGS RELATED TO YOUR MACHINE, PYTHON VERSION, PYTEST VERSION,...>
collected N items / M errors
...
ここで最後の行を強調表示することが重要です:collected N items / M errors
。次の行には、pytest
によって検出されたテストに関する情報が含まれます。したがって、テストは発見可能ですが、正しい実行に関連するエラーがあります。
次の行には、エラーが含まれますほとんどの場合、誤ったインポートに関連しています。
すべての依存関係が以前にダウンロードされていることを確認してください。特定のバージョンの依存関係で作業している場合(requirements.txt
ファイルにはyour_package == X.Y.Z
のようなものがあります)、それが必要な正しいバージョンであることを確認してください。