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

#php #symfony #testing #phpunit

#php #symfony #тестирование #phpunit

Вопрос:

Я пишу функциональные тесты для своего приложения Symfony3, и у меня проблема в том, что я не могу получить данные, возвращаемые контроллером. Каждый вызов контроллера по-прежнему возвращает перенаправление 301. Я заметил, что каждый вызов контроллера вызывает также класс RedirectResponse с методом setTargetUrl, который отвечает за перенаправление на соответствующий контроллер. Когда я использую свое приложение в качестве пользователя, все хорошо, но сканер возвращает только информацию о перенаправлении.

Вот пример:

Мой метод тестирования:

 public function testListController()
{
    $client = static::createClient();
    $crawler = $client->request('GET', '/list');
    print_r($client->getResponse());
}
  

Метод возвращает:

 <head>
    <meta charset="UTF-8" />
    <meta http-equiv="refresh" content="1;url=https://localhost/list/" />

    <title>Redirecting to http://localhost/list/</title>
</head>
<body>
    Redirecting to <a href="http://localhost/list/">https://localhost/list/</a>.
</body>
  

Почему я не могу получить доступ к правильному содержимому страницы? Все перехваты отключены, и нет никакого метода, который я вызываю перед доступом к контроллеру.

Комментарии:

1. нужно ли обычно входить в систему, прежде чем вы сможете вызвать GET / list или что-то подобное?

2. Может ли быть так, что ваш веб-сервер, mod_rewrite или приложение перенаправляет URL с завершающей косой чертой / на не завершающую косую черту или наоборот?

3. Попробуйте с / в конце маршрута следующим образом: $client->request('GET', '/list/'); Если это так, проверьте (добавьте к вопросу) свое определение маршрута.

4. @MagnusEriksson в функциональном тестировании веб-сервер (apache / nginx) не участвует в обмене данными, но советы хороши

5. Я добавил косую черту в конце, и это работает! Спасибо 🙂

Ответ №1:

Такое поведение связано с косой чертой в конце вашего определения маршрута. Итак, попробуйте это:

 $crawler = $client->request('GET', '/list/');
  

Вместо:

 $crawler = $client->request('GET', '/list');
  

Надеюсь, это поможет