-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Environment data
- VS Code version: 1.41.0
- Extension version (available under the Extensions sidebar): 2020.1.57204
- OS and version: MacOS 10.14.6
- Python version (& distribution if applicable, e.g. Anaconda): 3.7
- Type of virtual environment used (N/A | venv | virtualenv | conda | ...): venv
- Relevant/affected Python packages and their versions: pytest-5.2.2
- Jedi or Language Server? (i.e. what is
"python.jediEnabled"
set to; more info How to update the language server to the latest stable version #3977): Language Server
Expected behaviour
When running a test with a settings.json
that contains the "python.testing.cwd": "root/dir"
option should result in a pytest command that uses "root/dir"
as the --rootdir
argument. If it is null
, then fallback to existing behavior: --rootdir ${workspaceFolder}
.
This is necessary for my use case since my code is in a monorepo and loads test fixtures from disk using paths relative to a project root rather than the repo root.
For example,
python [~]/.vscode/extensions/ms-python.python-2020.1.57204/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir root/dir -s --cache-clear [...testfolders]
jfyi, I've anonymized [~]
and [...testfolders]
.
Actual behaviour
The "python.testing.cwd"
setting has no visible effect on --rootdir
. It is always the "workspace folder", which makes sense given the code I linked to below.
Relevant Code
args.splice(0, 0, '--rootdir', options.workspaceFolder.fsPath); |
vscode-python/src/client/testing/pytest/main.ts
Lines 50 to 52 in 2b6a8f2
const options: TestRunOptions = { | |
workspaceFolder: this.workspaceFolder, | |
cwd: this.rootDirectory, |
vscode-python/src/client/testing/pytest/main.ts
Lines 19 to 20 in 2b6a8f2
constructor(workspaceFolder: Uri, rootDirectory: string, serviceContainer: IServiceContainer) { | |
super(PYTEST_PROVIDER, Product.pytest, workspaceFolder, rootDirectory, serviceContainer); |
Steps to reproduce:
[NOTE: Self-contained, minimal reproducing code samples are extremely helpful and will expedite addressing your issue]
- Open a workspace folder containing python tests that are not in the root directory (i.e. a monorepo).
- Configure pytest to test a project directory.
2a. configure "python.testing.cwd" in settings.json to the project root. - Discover tests and observe that all tests are discovered.
- Run all tests.
4a. Observe the test session starts and all tests pass that do not need to load fixtures from disk.
4b. Observe the output logs look like this:
python [~]/.vscode/extensions/ms-python.python-2020.1.57204/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir [workspaceFolder] -s --cache-clear [project dir]
============================= test session starts ==============================
platform darwin -- Python 3.7.6, pytest-5.2.2, py-1.8.1, pluggy-0.13.1
rootdir: [workspaceFolder]
plugins: doubles-1.5.3, cov-2.8.1
Logs
Output for Python
in the Output
panel (View
→Output
, change the drop-down the upper-right of the Output
panel to Python
)
XXX
Output from Console
under the Developer Tools
panel (toggle Developer Tools on under Help
; turn on source maps to make any tracebacks be useful by running Enable source map support for extension debugging
)
XXX