#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');
Надеюсь, это поможет