Тести

← Тести

Ashterix

docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api

uk/docs/api/mcp-bundle/developers/testing.md новий файл +44 −0

Тести

Тести бандла запускаються в Docker (образ ufotech/php:8.4-fpm, див. docker-compose.yaml репозиторію):

make up-d
make composer-install
make test                                  # усі набори
make test ARGS="--testsuite Unit"          # один набір

make test потребує TTY; без нього (наприклад, у скриптах):

docker exec -w /app php_mcp vendor/bin/phpunit --testsuite Functional
Набір Що перевіряє Як
Unit Дерево конфігурації і типізовану конфігурацію, server.json, маніфести клієнтів, сховище сесій, носій запиту, виконавця інструментів, імпорт маршрутів, типові точки розширення PHPUnit, моки
Functional Бандл у застосунку: маршрутизацію, 404/401/403, initialize, tools/list (групи, версії, переклади, схеми, анотації), tools/call (результати, помилки, події, кеш, batch), сесії, stateless-протокол, CORS, DNS rebinding, ліміт тіла, server.json, маніфести, точки розширення Fixtures\TestKernel, HTTP-запити через handle() + terminate()
E2E Офіційний клієнт mcp/sdk через справжній HTTP у трьох версіях протоколу (2025-06-18, 2025-11-25, 2026-07-28) вбудований сервер PHP з tests/Fixtures/public/index.php

Застосунок-фікстура (tests/Fixtures): процедури в групах mcp, internal, off, bad, процедура версії 2, переклади, маршрути як у config/routes/ufo_mcp.yaml застосунку. TestKernel::$mcpConfig і TestKernel::$serviceOverrides змінюють конфігурацію або замінюють сервіс для одного тесту.

Покриття

З Xdebug 3.4.2 (образ ufotech/php:8.4-fpm) збирання покриття для тестів, що запускають сервер SDK, завершується segmentation fault. Використовуйте pcov.

docker exec php_mcp pecl install pcov     # один раз для контейнера
docker exec -w /app -e XDEBUG_MODE=off php_mcp php -d extension=pcov.so -d pcov.enabled=1 \
    vendor/bin/phpunit --testsuite Unit,Functional --coverage-text

Перевірка через MCP Inspector

docker exec -d -w /app php_mcp php -S 0.0.0.0:8099 tests/Fixtures/public/index.php
docker run --rm --network container:php_mcp node:22-alpine npx -y @modelcontextprotocol/inspector --cli \
    http://127.0.0.1:8099/mcp --transport http --header "Ufo-RPC-Token: test-token" --method tools/list