Я пытаюсь создать несколько модульных тестов для моих классов KIVY, которые будут работать на сервере CI / CD. Проблема в том, что на сервере CI / CD не установлены дисплеи / оконные менеджеры (ie X11), поэтому в тестах возникает ошибка «Не удается найти какого-либо ценного провайдера окон». Я пытаюсь создать приспособление pytest для макета функции проверки окна, но это не работает. Я также попытался добавить os.environ["KIVY_GL_BACKEND"] = "mock"
в начало файла, но это не помогло. У кого-нибудь есть опыт работы с этим?
Мой код выглядит следующим образом:
@pytest.fixture
def window_mock() -> Generator[Dict[str, Any], None, None]:
"""Mock window checking"""
w_mock = Mock(spec=kivy.base.EventLoopBase)
w_mock.ensure_window = Mock(wraps=lambda x, _: x())
with patch('<my_custom_module>.kivy.base.EventLoopBase', new=w_mock):
yield w_mock
Я нашел это связанное обсуждение: https://gist.github.com/dustinfarris/8851078, но оно не работает для моего случая.
Это ошибка, которую я получаю:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.7/site-packages/kivy/uix/relativelayout.py:274: in __init__
super(RelativeLayout, self).__init__(**kw)
.venv/lib/python3.7/site-packages/kivy/uix/floatlayout.py:65: in __init__
super(FloatLayout, self).__init__(**kwargs)
.venv/lib/python3.7/site-packages/kivy/uix/layout.py:76: in __init__
super(Layout, self).__init__(**kwargs)
.venv/lib/python3.7/site-packages/kivy/uix/widget.py:334: in __init__
EventLoop.ensure_window()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <kivy.base.EventLoopBase object at 0x7f154ef98950>
def ensure_window(self):
'''Ensure that we have a window.
'''
import kivy.core.window # NOQA
if not self.window:
Logger.critical('App: Unable to get a Window, abort.')
> sys.exit(1)
E SystemExit: 1
.venv/lib/python3.7/site-packages/kivy/base.py:128: SystemExit