Создание приспособления pytest для оконной насмешки в Киви - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать несколько модульных тестов для моих классов 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
...