Если Обозреватель тестов Python в VS Code не находит тесты, сообщает об ошибках импорта или ищет не в той папке на macOS, сначала проверьте рабочий каталог тестирования Python и аргументы фреймворка. Задайте для python.testing.cwd каталог, ожидаемый вашей командой запуска тестов, затем обновите обнаружение и проверьте журнал вывода Python. Для unittest также проверьте его отдельный аргумент начального каталога -s; изменение cwd не заменяет эту настройку.

Проверьте, какой каталог использует VS Code

Откройте Обозреватель тестов и выполните команду Test: Refresh Tests из палитры команд (⇧⌘P). Если обнаружение завершилось ошибкой, перейдите в Вид > Вывод (View > Output), выберите Python в меню каналов вывода и ознакомьтесь с последней записью об обнаружении. Расширение Python отправляет ошибки обнаружения в этот журнал, что помогает отличить проблему с путями от отсутствующего фреймворка или синтаксической ошибки. VS Code документирует эти шаги по обнаружению и ведению журнала.

Проверьте, какая папка открыта в окне VS Code. В рабочей области с одной папкой эта папка обычно является корнем проекта. Если вы открыли родительскую папку репозитория или мультикорневую рабочую область (multi-root workspace), относительные пути могут разрешаться относительно корня, отличного от предполагаемого. Текущего каталога терминала недостаточно, чтобы определить каталог, использованный расширением; сверьтесь с выводом обнаружения и настройками рабочей области. В мультикорневой рабочей области VS Code позволяет задавать настройки для конкретных папок, и переменная ${workspaceFolder} указывает на папку, связанную с этой настройкой. Руководство по рабочим областям VS Code описывает мультикорневые папки, а справочник по переменным охватывает пути в контексте папок.

Задайте рабочий каталог тестирования Python

Например, если вы открыли корень репозитория, но команда запуска тестов должна выполняться из подпапки backend, откройте настройки рабочей области на Mac с помощью ⇧⌘P и выберите Preferences: Open Workspace Settings (JSON). Добавьте или объедините этот ключ с существующим объектом JSON:

{
  "python.testing.cwd": "${workspaceFolder}/backend"
}

Используйте фактический каталог вашего проекта. Если тесты должны запускаться в корне рабочей области, вы можете опустить эту настройку или задать для неё значение ${workspaceFolder}. Избегайте указания простого относительного пути вроде backend, если вы не уверены, относительно какого корня он отсчитывается; явное использование переменной рабочей области делает требуемую основу более понятной. Настройки рабочей области переопределяют пользовательские настройки, поэтому проверьте обе области действия, если изменение не дает эффекта. VS Code сохраняет настройки рабочей области с одной папкой в файле .vscode/settings.json; используйте вкладку Workspace в редакторе настроек, чтобы проверить активное значение. Настройки рабочей области и их приоритет описаны в документации по настройкам VS Code.

Параметр cwd расширения Python не является обязательным. В документации указано, что его установка также корректирует аргумент --rootdir для pytest; rootdir — это конфигурация корневого каталога проекта в pytest, поэтому не следует считать ее взаимозаменяемой с аргументом поиска тестов в каждом фреймворке. Справочник по настройкам тестирования Python описывает это поведение pytest.

Проверьте специфичные для фреймворка аргументы обнаружения

Для pytest проверьте параметр python.testing.pytestArgs на наличие пути, указывающего на неожиданное место. Такой путь, как tests, сообщает pytest, что именно собирать, тогда как python.testing.cwd задает контекст рабочего каталога. Оставляйте только те аргументы, которые требуются вашему проекту, и согласуйте путь с этим контекстом. После редактирования снова запустите Test: Refresh Tests. Расширение обнаруживает файлы pytest, соответствующие его соглашениям, в текущей папке и подпапках; обнаружение все еще может завершиться неудачей по причинам, не связанным с cwd, включая отсутствие установленного pytest или ошибки в файлах тестов. В официальном руководстве по тестированию перечислены особенности обнаружения и распространенные сообщения об ошибках.

Для unittest проверьте python.testing.unittestArgs отдельно. Его аргументы по умолчанию включают -s ., где -s выбирает начальный каталог. Если тесты находятся в backend/tests, а cwd — это корень репозитория, настройте начальный каталог соответствующим образом, например:

{
  "python.testing.cwd": "${workspaceFolder}",
  "python.testing.unittestEnabled": true,
  "python.testing.pytestEnabled": false,
  "python.testing.unittestArgs": ["-v", "-s", "backend/tests", "-p", "*test*.py"]
}

Это пример для проекта, использующего unittest; не копируйте его без изменений, если ваш фреймворк или правила именования файлов отличаются. unittest также требует, чтобы обнаруживаемые файлы тестов были импортируемыми модулями или пакетами. Если в журнале отображаются ошибки импортируемости в подпапке с тестами, проверьте структуру пакета; в VS Code отмечается, что файл __init__.py может сделать такие папки импортируемыми. Официальное руководство описывает параметры -s и -p для unittest.

Обновите данные и изолируйте оставшиеся сбои

После изменения настроек снова запустите Test: Refresh Tests. Если VS Code по-прежнему использует неожиданное окружение, выполните команду Python: Select Interpreter и выберите окружение, в котором установлен ваш тестовый фреймворк; выбранный интерпретатор используется для функций Python, включая тестирование. Руководство по окружениям Python в VS Code объясняет выбор интерпретатора.

Если в выводе по-прежнему отображается неправильный путь, сравните зафиксированный в журнале рабочий каталог с корнем рабочей области и настроенными аргументами тестов. Если путь указан верно, но обнаружение не удается, ориентируйтесь на фактическую ошибку: проверьте установку фреймворка, ошибки импорта, синтаксические ошибки и шаблоны имен файлов тестов. Корректировка cwd не может исправить эти независимые проблемы. Если в правильно настроенном проекте в журнал все равно записывается несогласованный путь или настройка игнорируется, сохраните вывод Python и соответствующие настройки при сообщении об ошибке; универсальной команды VS Code, заставляющей каждый тестовый фреймворк использовать другой каталог, не существует.

Источники