VS Code not finding pytest tests

22,468

Solution 1

If anyone comes across this post-2020, this issue in the vscode-python repo saved my life. Basically, just do the following:

  1. Uninstall the Python extension
  2. Delete the file that contains the extension from your ~/.vscode folder (mine looked like ms-python.python-[YEAR].[MONTH].[VERSION])
  3. Reinstall the extension

Worked like a charm.

Solution 2

In September 2021, I was able to get VS code to find the test directory again by downgrading the VS Code Python extension from version 2021.9.1191016588 to version v2021.8.1159798656. To downgrade, right-click the extension and click "Install another version..."

Solution 3

EDIT: I downgraded to Pytest 4.0.1 after reading issue 3911 and Test Discovery now works.


Me too. When I blow away .pytest_cache and rerun Python: Discover Unit Tests, I see that the freshly generated .pytest_cache/v/cache/nodeids contains all the tests, but I still get the dialog complaining about No tests discovered.

  • Python 3.7.2
  • macOS 10.13.6
  • VS Code 1.30.2
  • Python Extension 2018.12.1
  • Pytest 4.1.0

.vscode/settings.json:

{
    "python.linting.enabled": false,
    "python.unitTest.unittestEnabled": false,
    "python.unitTest.nosetestsEnabled": false,
    "python.unitTest.pyTestEnabled": true,
    "python.pythonPath": "venv3/bin/python"
}

Tests are in a top-level subdirectory called test. Running pytest manually works.

Solution 4

Another thing to check, if vscode fails to discover the tests, is to make sure it doesn't do so because of the coverage module being enabled. In my case the test cases were being discovered correctly but the discovery eventually kept failing due to low test coverage, as described here. So first, make sure that the tests could actually be collected by pytest as suggested here:

pytest --collect-only

and then make sure you're not forcing coverage check (e.g. in setup.cfg) with e.g.

addopts= --cov <path> -ra

Solution 5

My Python plugin and Test Explorer works just fine.

In my case naming the class without test_.py was the issue. In other words, naming the test file without it starting with "test_", not "tests_", makes it so the explorer does not see the issue. Ex: test_.py works but tests_.py, 12345abcde.py don't work.

Share:
22,468
Ben
Author by

Ben

Currently working at MajorBoost Inc. solving healthcare's communications problems one phone call at a time. Formerly: Worked on HoloLens for Microsoft Was the CTO at a location based games company Tech lead and programmer for Ubisoft and Sony Computer Entertainment Dot-bomb survivor and one of the many people who, independently, created something like AJAX but didn't come up with the cool name.

Updated on July 05, 2022

Comments

  • Ben
    Ben almost 2 years

    I have PyTest setup in vs-code but none of the tests are being found even though running pytest from the command line works fine.

    (I'm developing a Django app on Win10 using MiniConda and a Python 3.6.6 virtual env. VS Code is fully updated and I have the Python and Debugger for Chrome extensions installed)

    Pytest.ini:

    [pytest]
    DJANGO_SETTINGS_MODULE = callsign.settings
    python_files = tests.py test_*.py *_tests.py
    

    vs-code workspace settings:

    {
        "folders": [
            {
                "path": "."
            }
        ],
        "settings": {
            "python.pythonPath": "C:\\ProgramData\\Miniconda3\\envs\\callsign\\python.exe",
            "python.unitTest.unittestEnabled": false,
            "python.unitTest.nosetestsEnabled": false,
            "python.unitTest.pyTestEnabled": true,
            "python.unitTest.pyTestArgs": ["--rootdir=.\\callsign", "--verbose"]
        }
    }
    

    Finally, the output from the Python Test Log inside VS code:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.6, pytest-4.1.1, py-1.7.0, pluggy-0.8.1
    Django settings: callsign.settings (from ini file)
    rootdir: c:\Users\benhe\Projects\CallsignCopilot\callsign, inifile: pytest.ini
    plugins: django-3.4.5
    collected 23 items
    <Package c:\Users\benhe\Projects\CallsignCopilot\callsign\transcription>
      <Module test_utils.py>
        <Function test_n_digits>
        <Function test_n_alpha>
        <Function test_n_hex>
        <Function test_n_digits_in_range>
        <Function test_v1_audiofilename>
        <Function test_v2_audiofilename>
        <Function test_v1_bad_int_filename>
        <Function test_v1_bad_non_int_filename>
        <Function test_bad_format>
        <Function test_no_format>
        <Function test_too_many_segments>
        <Function test_too_few_segments>
        <Function test_good_v2_filename>
        <Function test_bad_year_v2_filename>
        <Function test_bad_month_v2_filename>
        <Function test_bad_day_v2_filename>
        <Function test_bad_date_v2_filename>
        <Function test_bad_short_serial_v2_filename>
        <Function test_bad_long_serial_v2_filename>
        <Function test_good_v3_filename>
        <Function test_good_lowercase_block_v3_filename>
        <Function test_bad_non_alpha_block_v3_filename>
        <Function test_real_filenames>
    
    ======================== no tests ran in 1.12 seconds =========================
    

    Am I missing any steps to get vs-code to find the tests?

  • Mike M.
    Mike M. almost 5 years
    Do the tests show up in the Test Explorer for you after rerunning Python: Discover Tests? I still don't see anything after downgrading.
  • WiseStrawberry
    WiseStrawberry over 4 years
    Update for 9th of october: you should be using: json "python.testing.unittestEnabled": false, "python.testing.nosetestsEnabled": false, "python.testing.pytestEnabled": true,
  • Arcsector
    Arcsector almost 4 years
    @Peter Did you reload the VSCode window after uninstalling/deleting and again after reinstalling?
  • Byron70
    Byron70 over 3 years
    Ugh, finally, something that worked. I usually test_, but had just fat fingered it. Thanks!!!
  • whizzkid
    whizzkid over 3 years
    You sir, saved me lots of hours! Thanks!
  • Vergil
    Vergil over 2 years
    This worked for me on the latest version of visual studio.
  • MarnixKlooster ReinstateMonica
    MarnixKlooster ReinstateMonica over 2 years
    Worked for me too, was on now-latest v2021.10.1336267007. Thanks! (No idea what the cause is, can't see any error logged anywhere with that newer extension version, just acts as if the project has no tests while pytest command line discovers and runs the tests just fine.)
  • Sterling
    Sterling over 2 years
    I had a syntax error - "expected indentation" or similar (I had a dangling if __name__ == "__main__": statement). The error didn't seem to show up until I ran pytest --collect-only (though maybe it would have if I just did pytest instead of clicking on the VS Code buttons). Thank you!
  • Person
    Person about 2 years
    Still worked for me in 2022!
  • targhs
    targhs about 2 years
    Yes...Worked for me too in 2022