Я застрял на следующей части:
Код: Выделить всё
config = configparser.ConfigParser()
config.read(r"C:\git\config.ini")
Подходы, которые казались многообещающими, но потерпели неудачу:
- mock configparser.ConfigParser.read.return_value = config_dict --> это не изменяет конфигурацию переменной, вместо этого возвращает dict, который (в лучшем случае) не сохраняется или прерывает выполнение
- добавьте раздел 'GITLAB_TEST' в test_pytest.py через config.add_section('GITLAB_TEST'), config.set('GITLAB_TEST', 'token', 'test_token') --> config и его определенные разделы перезаписываются в gitlab.py как config = configparser.ConfigParser( )
Код: Выделить всё
# ./module/io/gitlab.py
import configparser
import os
import sys
import gitlab
class GitlabApi:
def __init__(self, client=None):
if sys.platform == "win32":
config = configparser.ConfigParser()
config.read(r"C:\git\config.ini")
self.token = config["GITLAB_{}".format(client)]["token"]
def return_client(self):
self.api = gitlab.Gitlab(
"https://gitlab.company_name.com",
private_token=self.token
)
self.api.auth()
return self.api
# ./tests/test_gitlab.py
import pytest
from unittest.mock import MagicMock
from unittest.mock import Mock
from ane.io import gitlab
def test_return_client_win32():
gitlab.sys = Mock(platform="win32")
gitlab.gitlab.Gitlab = MagicMock()
test_client, expected_private_token, expected_url = "test", "test_token", "test_url"
config_dict = {
"GITLAB_TEST": {"token": "test_token"},
"GITLAB_SCRIPTS": {"token": "script_token"},
}
# following does not work
gitlab.configparser.ConfigParser = MagicMock()
gitlab.configparser.ConfigParser.return_value.read.return_value = config_dict
gitlab.GitlabApi(client=test_client) # mocked object
gitlab.gitlab.Gitlab.assert_called_once_with(
expected_url, private_token=expected_private_token
)
- Проверьте, config.read был вызван с правильным аргументом
- Различный путь к файлу конфигурации на рабочем сервере и на локальном компьютере
Подробнее здесь: https://stackoverflow.com/questions/681 ... -config-re