VS Code Django Unit Test Debugging
Might need to add permissions to the test db for the master user:
mysql --host 127.0.0.1 -u root -p'root' -e "GRANT ALL PRIVILEGES ON test_cuic.* TO 'master'@'%';"
GRANT ALL PRIVILEGES ON test_.* TO 'master'@'%';
https://devpress.csdn.net/python/62fe07607e66823466192fa3.html
ve/bin/pip install pytest pytest-django
ve/bin/pip install hypothesis==6.4.0 hypothesis-jsonschema==0.19.0
specifyweb/pytest.ini ->
[pytest]
DJANGO_SETTINGS_MODULE=specifyweb.settings
python_files=*test*.py testparsing.py
addopts = --ignore=specifyweb/specify/selenium_tests.py
.vscode/settings.json ->
{
"python.pythonPath": "ve/bin/python",
"python.testing.pytestArgs": [
"specifyweb",
"-s",
"-vv"
],
"python.testing.pytestEnabled": true,
"python.testing.nosetestsEnabled": false,
"python.testing.unittestEnabled": false
}
.env -> not needed
PYTHONPATH=specifyweb/
manage.py -> paste between “os.environ.setdefault” … “try: from django.core.management”
from django.conf import settings
if settings.DEBUG:
if os.environ.get('RUN_MAIN') or os.environ.get('WERKZEUG_RUN_MAIN'):
import debugpy
debugpy.listen(("0.0.0.0", 3000))
print('Attached!')
requirement-testing.txt ->
debugpy==1.6.5
pytest==7.2.1
pytest-django==4.5.2
docker-compose.yml ->
ports:
- 3000:3000 # Django Debug
- 8888:8888 # debugging service (ptvsd)
SECRET_KEY=bogus
Dockerfile ->
COPY --chown=specify:specify requirements-testing.txt /home/specify/
RUN python3.8 -m venv ve \
&& ve/bin/pip install --no-cache-dir -r /home/specify/requirements-testing.txt \
&& ve/bin/pip install --no-cache-dir -r /home/specify/requirements.txt
For the non-container instance of vscode, the debugger is used at runtime with the front-end:
.vscode/launch.json ->
{
"version": "0.2.0",
"configurations": [
{
"name": "Run Django",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/specifyweb",
"remoteRoot": "/opt/specify7/specifyweb"
}
],
"port": 3000,
"host": "127.0.0.1",
}
]
}
.vscode/settings.json ->
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./specifyweb",
"-p",
"*test*.py"
],
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true,
"python.linting.mypyEnabled": true,
"python.linting.enabled": true
}