Update documentation and code snippets

This commit is contained in:
2025-12-02 11:31:24 +03:00
parent 7c20bf296b
commit eae8cdbb58
14 changed files with 80 additions and 63 deletions
+14 -8
View File
@@ -3,12 +3,12 @@
В этом разделе описаны практики тестирования приложений на основе ``Argenta``. Примеры основаны на фактическом публичном API.
Модульное тестирование хендлеров
--------------------------------
Модульное тестирование обработчиков
------------------------------------
Обработчики в Argenta — обычные функции. Их удобно тестировать как чистые функции, не поднимая весь цикл приложения. Рекомендуются ``unittest`` или ``pytest``.
Обработчики в ``Argenta`` — обычные функции. Их удобно тестировать как чистые функции, не поднимая весь цикл приложения. Рекомендуются ``unittest`` или ``pytest``.
Пример для простого хендлера без DI:
**Пример использования:**
.. literalinclude:: ../code_snippets/testing/simple_handler_unittest.py
:language: python
@@ -19,7 +19,9 @@
Тестирование с внедрением зависимостей (DI)
-------------------------------------------
Если хендлеру нужны зависимости, используйте ``dishka`` и интеграцию Argenta:
Если обработчику нужны зависимости, используйте ``dishka`` и интеграцию ``Argenta``:
**Пример использования:**
.. literalinclude:: ../code_snippets/testing/di_handler_unittest.py
:language: python
@@ -30,7 +32,9 @@
Интеграционное тестирование приложения
--------------------------------------
Для более высокого уровня тестов собирайте ``App`` и ``Router`` и вызывайте хендлеры через парсинг команд, обходя бесконечный цикл ввода. Это даёт близкое к реальности поведение без необходимости симулировать ``stdin``.
Для более высокого уровня тестов собирайте ``App`` и ``Router`` и вызывайте обработчики через парсинг команд, обходя бесконечный цикл ввода. Это даёт близкое к реальности поведение без необходимости симулировать ``stdin``.
**Пример использования:**
.. literalinclude:: ../code_snippets/testing/app_integration_unittest.py
:language: python
@@ -39,13 +43,15 @@
-----
E2E-тестирование цикла
------------------------------------
----------------------
Полный запуск цикла ``start_polling`` можно покрывать через подпроцесс с передачей строк в ``stdin``. Это тяжелее и обычно не требуется. Если всё же необходимо — пример ниже.
.. danger ::
.. danger::
Обязательно передавайте строковый триггер команды выхода последним элементом в списке, который передаёте в контекстном менеджере при патче ``input`` как аргумент ``side_effects``, иначе тестируемое приложение будет ожидать ввода следующей команды и не сможет корректно завершиться.
**Пример использования:**
.. literalinclude:: ../code_snippets/testing/app_e2e_test.py
:language: python
:linenos: