microsoft / microsoft/vscode

Django test discovery passes incompatible default arguments to `manage.py test`

Open
#327,966 3 comments 0 reactions 1 assignee Claimed by @eleanorjboyd View on GitHub
Dominant language
TypeScript
Stars
193k
Forks
42.4k
PR merge metrics
PR metrics pending

Description

Does this issue occur when all extensions are disabled?: No — the Microsoft Python extension is required to reproduce the issue.

- VS Code Version: 1.130.0, 1b6a188127eeaf9194f945eb6eb89a657e93c54c, arm64
- Python extension version: -
- OS Version: macOS Tahoe 26.5.2 (25F84)
- Python Version: 3.14
- Django Version: 6.0.7

## Steps to Reproduce

1. Open a Django project with `manage.py` in the workspace root.
2. Follow the documented Django unittest setup:
https://code.visualstudio.com/docs/python/testing#_django-unit-tests
3. Set the required environment variables, including `MANAGE_PY_PATH` and `DJANGO_SETTINGS_MODULE`.
4. Enable unittest discovery without explicitly configuring `python.testing.unittestArgs`.
5. Open the Testing view or run **Python: Discover Tests**.

## Actual Behaviour

The Python extension runs Django test discovery using:

```text
/Users/kamil/Projects/reactor/.venv/bin/python /Users/kamil/Projects/reactor/manage.py test --testrunner=django_test_runner.CustomDiscoveryTestRunner -v -s . -p '*test*.py'
```

These appear to be the default arguments intended for Python's standard `unittest discover` command:

```text
-v -s . -p *test*.py
```

They are not valid as-is for Django's `manage.py test` command.

### 1. `-v` is used incorrectly

For Django, `-v` is an alias for `--verbosity` and requires a value:

```text
-v {0,1,2,3}
```

Passing only `-v` therefore causes argument parsing to fail:

```text
manage.py test: error: argument -v/--verbosity: expected one argument
```

### 2. `-s` is not a valid Django test option

Django's `manage.py test` command does not provide a `-s` option.

The `-s .` pair belongs to `python -m unittest discover`, where `-s` specifies the start directory. Passing it to `manage.py test` is therefore incompatible with Django's command-line interface.

## Expected Behaviour

When Django test discovery is enabled through `MANAGE_PY_PATH`, the extension should not pass the default `unittest discover` arguments to `manage.py test`.

Django discovery should work with the documented configuration and without requiring users to override the default test arguments manually.

## Workaround

Explicitly setting an empty argument list makes discovery work:

```json
{
"python.testing.unittestArgs": []
}
```

## Recommendation

Do not provide any default test arguments when invoking Django's test command.

In other words, when Django discovery is active, the command should be based on:

```shell
python manage.py test --testrunner=django_test_runner.CustomDiscoveryTestRunner
```

Any additional arguments should come only from an explicit user configuration.

This avoids passing options that belong to `unittest discover` but have different meanings, require different values, or do not exist in Django's test command.

## Relevant Log

```text
2026-07-29 08:27:41.543 [info] Started unittest discovery subprocess (environment extension) for workspace /Users/kamil/Projects/reactor
2026-07-29 08:27:41.797 [error] usage: manage.py test [-h] [--noinput] [--testrunner TESTRUNNER] [--failfast]
[-t TOP_LEVEL] [-p PATTERN] [--keepdb]
[--shuffle [SEED]] [-r] [--debug-mode] [-d]
[--parallel [N]] [--tag TAGS]
[--exclude-tag EXCLUDE_TAGS] [--pdb] [-b]
[--no-faulthandler] [--timing] [-k TEST_NAME_PATTERNS]
[--durations N] [--version] [-v {0,1,2,3}]
[--settings SETTINGS] [--pythonpath PYTHONPATH]
[--traceback] [--no-color] [--force-color]
[test_label ...]
manage.py test: error: argument -v/--verbosity: expected one argument

Django test discovery process exited with non-zero error code See stderr above for more details.

2026-07-29 08:27:41.797 [info] MANAGE_PY_PATH is set, running Django discovery with path to manage.py as: $/Users/kamil/Projects/reactor/manage.py
Running Django tests with command: ['/Users/kamil/Projects/reactor/.venv/bin/python', '/Users/kamil/Projects/reactor/manage.py', 'test', '--testrunner=django_test_runner.CustomDiscoveryTestRunner', '-v', '-s', '.', '-p', '*test*.py']

2026-07-29 08:27:41.805 [info] Unittest discovery completed for workspace /Users/kamil/Projects/reactor
2026-07-29 08:27:41.805 [info] [test-by-project] Project reactor (Python 3.14) discovery completed
2026-07-29 08:27:41.805 [info] [test-by-project] Discovery complete: 1/1 projects completed
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.