Python >> Tutoriel Python >  >> Python Tag >> VScode

La découverte du test VSCode pytest échoue

J'ai passé des années à essayer de déchiffrer cette erreur inutile après avoir créé un test contenant des erreurs d'importation. Vérifiez que votre suite de tests peut réellement être exécutée avant de procéder à un dépannage plus approfondi.

pytest --collect-only est votre ami.


Ce n'est pas une réponse complète car je ne sais pas pourquoi cela se produit et peut ne pas être lié à votre problème, selon la façon dont vous avez structuré vos tests.

J'ai résolu ce problème en mettant un __init__.py fichier dans mon dossier de tests

EX :


├───.vscode
│       settings.json
│
├───app
│       myapp.py
│
└───tests
        test_myapp.py
        __init__.py

cela fonctionnait il y a quelques jours sans cela mais l'extension python a été récemment mise à jour. Je ne sais pas s'il s'agit du comportement prévu ou d'un effet secondaire de la façon dont les découvertes sont actuellement faites

https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md
Use Python code for discovery of tests when using pytest. (#4795)


Je pensais juste que j'ajouterais ma réponse ici car cela pourrait bien affecter quelqu'un qui utilise un .env fichier pour les paramètres d'environnement de leur projet, car il s'agit d'une configuration courante pour les applications à 12 facteurs.

Mon exemple suppose que vous utilisez pipenv pour la gestion de votre environnement virtuel et que vous disposez d'un .env fichier dans le répertoire racine du projet.

Mon fichier json de paramètres d'espace de travail vscode ressemble à ci-dessous. La ligne cruciale pour moi ici était "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"
    ],
}

J'espère que cela fera gagner à quelqu'un le temps que j'ai passé à comprendre cela.