Symfony 5 и функциональная проверка API-Platform 2.5 для недопустимого метода - PullRequest
0 голосов
/ 04 мая 2020


У меня есть Symfony 5 и API-платформа 2.5, только что установленная с flex. Я создал сущность User как API Resource, список сбора должен быть запрещен, поэтому я создал функциональный тест для его проверки.

Тест пройден правильно, но я также получаю ошибку:

$ ./vendor/bin/simple-phpunit --filter=UsersTest::testGetCollection
PHPUnit 7.5.20 by Sebastian Bergmann and contributors.

Testing Project Test Suite
2020-05-03T21:50:50+00:00 [error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: "No route found for "GET /api/users": Method Not Allowed (Allow: POST)" at /srv/api/vendor/symfony/http-kernel/EventListener/RouterListener.php line 140
.                                                                   1 / 1 (100%)

Time: 691 ms, Memory: 30.00 MB

OK (1 test, 1 assertion)

Я хотел бы скрыть сообщение об ошибке.

Вот файлы:

Класс пользователя

/**
 * @ApiResource(collectionOperations={"post"}, itemOperations={"get"})
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User
{
   /* some code */
}

Тест

class UsersTest extends ApiTestCase
{
    use RefreshDatabaseTrait;

    /* some code */

    public function testGetCollection(): void
    {
        try {
            self::createClient()->request(Request::METHOD_GET, '/api/users');
            self::assertResponseStatusCodeSame(Response::HTTP_METHOD_NOT_ALLOWED);
        } catch (\Exception $e) {
        }
    }

    /* some code */
}

phpunit. xml .dist

<php>
    <ini name="error_reporting" value="-1" />
    <server name="APP_ENV" value="test" force="true" />
    <server name="SHELL_VERBOSITY" value="-1" />
    <server name="SYMFONY_PHPUNIT_REMOVE" value="" />
    <server name="SYMFONY_PHPUNIT_VERSION" value="7.5" />
</php>

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я проверил код, похоже, вы не использовали монологическую библиотеку в своем коде. И вы были правы, RouterListener распечатает сообщения об ошибках в случае, если вы не определили какой-либо loggerIterface (драйвер журнала) для вашего проекта. как только вы установите symfony/monolog-bundle, вы больше не увидите эти ужасные сообщения.

0 голосов
/ 04 мая 2020

Вы можете использовать

$client = self::createClient();
$client->catchExceptions(false);

Но я рекомендую использовать

$client = self::createClient(); 
$client->request(Request::METHOD_GET, "/api/users");
$this->assertEquals(Response::HTTP_METHOD_NOT_ALLOWED, $client->getResponse()->getStatusCode());

вместо переноса кода с помощью try / catch

...