Я пытаюсь запустить некоторые базовые модульные тесты для моего приложения Laravel с помощью PHPUnit.Laravel: PHPUnit вызывает 404s для всего
Однако все HTTP-запросы возвращают 404 не найденный код состояния HTTP, поэтому мы терпим неудачу при первом препятствии.
После траления в Интернете, я нашел информацию о том, как исправить это, но до сих пор ни один из них на самом деле не работает:
- Проверка я ссылка именованного маршрута правильно.
- Проверка того, что этот маршрут имеет метод контроллера.
- Убедитесь в том, что он работает в браузере.
- Я гарантировал, что мое приложение URL правильно установить во всех нужных местах:
TestCase::$baseUrl
,Config->app->url
... Ее набор дляhttp://localhost/myappfolder
- Я пробовал различные методы из моей методы испытаний блока, чтобы получить ответ HTTP объект. До сих пор все приводили к 404:
$this->route()
,$this->action()
,$this->call()
. - Я попытался удалить все ссылки на средство защиты маршрутов от моих контроллеров. Я считаю, что он отключен при выполнении модульных тестов, но я сделал это, когда я вытаскиваю свои пресловутые волосы, пытаясь диагностировать эту проблему. Нет эффекта.
- Файл корней моего приложения имеет несколько PHP
require
s, которые содержат файлы меньшего маршрута. Тейлор Отуэлл ранее сказал, что файл маршрутов, подобный этому, но содержащийrequire_once
, может вызвать эти ошибки 404. Он предлагает перейти наrequire
. Некоторые разработчики сообщают, что это исправление для них, но у меня только что былоrequire
. В любом случае, я также пытался перемещать маршруты обратно в файл основных маршрутов, но это тоже не сработало.
Исследование было обычно необычным:
- Если я редактирую метод
route()
вIlluminate\Foundation\Testing\Concerns
распечатать URL он генерирует, это на самом деле вполне сформировано:http://localhost/myprojectfolder/route-url-text
. Посещение этой страницы в браузере отлично работает. Посещение его с помощью cURL также работает. Запустив$this->call()
по URL-адресу, который был сгенерирован, а затем запущен PHPUnit, он снова отображает 404. Так что его просто PHPUnit делает что-то странное.
Вот код, я использую в единичном тестовом сценарии:
public function testThis()
{
$response = $this->route('GET', 'myRouteName', [
'myParam' => 5
]);
dd($response->status()); // 404 - always!
}
Его любит есть что-то ступая и явно бросающие 404 ... было бы очень признателен, если кто-то может пролить свет на этом.
Это будет показаться странным, но что произойдет, если вы сразу вызовете другой маршрут? Вы получаете 200? У меня была аналогичная проблема в прошлом, но так и не нашли решение – Aron
Это странно ... но я ценю предложение. Я поставил несколько запросов подряд. Все еще получите 404. – kohloth
Ах, простите, я не могу больше помочь. Возможно, стоит опубликовать эту проблему на форуме laracasts – Aron