Как настроить root для тестов в Python в коде Visual Studio? - PullRequest
0 голосов
/ 07 марта 2020
project\
  src\
      __init__.py  
  tests\
      __init__.py
      stubs\r_json_response_expired.json

В моем тесте мне нужно загрузить файл JSON. this.

@patch('requests.post')
def test_subscription_delete_only_if_invalid(self, mock_post):
    with app.app_context():
        expires_at = datetime.utcnow()
        m = self.inject_expired_r_json()

def inject_expired_r_json(self):
        with open('stubs/r_json_response_expired.json') as fb_file:
            receipt_response = json.load(fb_file)
        m = MagicMock()
        m.json = MagicMock(name='json')
        m.json.return_value = receipt_response
        return m

При запуске теста VS код показывает:

FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'stubs / r_json_response_expired. json'

В моем проекте .env:

PYTHONPATH =. / Sr c

И в настройках. json (VS CODE)

"terminal.integrated.env.osx": {
    "PYTHONPATH": "${workspaceFolder}/src"
},
"python.envFile": "${workspaceFolder}/.env"

Мне не нравится менять путь в тесте, чтобы избежать взлома PyCharm, если мне случится переключить IDE.

1 Ответ

0 голосов
/ 11 марта 2020

Проблема заключается в текущем каталоге, в то время как ваши тесты работают в вашей рабочей области root, project. Вероятно, ваш лучший вариант - использовать importlib_resources для чтения файла. Если вы поместите файл __init__.py в заглушки, вы сможете прочитать файл JSON как:

import importlib_resources

from . import stubs

data = importlib_resources.files(stubs).joinpath('r_json_response_expired.json').read_text()

Если по какой-то причине вы не можете поместить __init__.py в каталог, вы можете создать путь к файлу с использованием pathlib.

import pathlib

data_path = pathlib.Path(__file__).parent / "stubs" / "r_json_response_expired.json"
data = data_path.read_text(encoding="utf-8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...