Я пытаюсь использовать PHP-фреймворк Pest для тестирования, но не могу выполнить простой тест.
it('can view home page', function () {
$response = $this->get('/');
expect($response->status())->toBe(200);
});
Я всегда получаю ошибку:
Не удалось подтвердить, что 404 идентично 200.
Кажется, URL-адрес читается неправильно. Вот конфигурация моих файлов:
.env-файл
APP_NAME = "My software name"
APP_ENV=local
APP_KEY=base64:abchdX+Hm/LYphNZIBx942SFZoJYzGUFGidCxQifqMw=
APP_DEBUG=true
APP_URL=http://localhost/mysoftware
phpunit.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<phpunit xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = "./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap = "vendor/autoload.php"
colors = "true">
<testsuites>
<testsuite name = "Unit">
<directory suffix = "Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name = "Feature">
<directory suffix = "Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory suffix = ".php">./app</directory>
</include>
</source>
<php>
<env name = "APP_ENV" value = "local"/>
<env name = "BCRYPT_ROUNDS" value = "4"/>
<env name = "CACHE_DRIVER" value = "array"/>
<!-- <env name = "DB_CONNECTION" value = "sqlite"/> -->
<!-- <env name = "DB_DATABASE" value = ":memory:"/> -->
<env name = "MAIL_MAILER" value = "array"/>
<env name = "QUEUE_CONNECTION" value = "sync"/>
<env name = "SESSION_DRIVER" value = "array"/>
<env name = "TELESCOPE_ENABLED" value = "false"/>
</php>
</phpunit>
Я читал некоторые темы, такие как:
https://www.reddit.com/r/laravel/comments/kivwyr/laravel_phpunit_test_pointing_to_wrong_url/
Настройка URL-адреса модульного теста Laravel 5 с помощью phpunit.xml
Laravel phpunit не получает правильный URL
Где я в конечном итоге пытаюсь исправить свой файл phpunit.xml, добавив:
<env name = "APP_URL" value = "http://localhost/mysoftware"/>
Но ошибка сохраняется. Что я могу сделать для дальнейшей отладки?
Редактировать 1) - В моих файлах маршрутов действительно есть маршруты /
и /login
, и не имеет значения, указывает ли тест на домашний маршрут или маршрут входа в систему, ошибка одна и та же.
it('can view home page', function () {
$response = $this->get('/');
expect($response->status())->toBe(200);
});
it('can view login page', function () {
$response = $this->get('/login');
expect($response->status())->toBe(200);
});
Конечно, я могу получить доступ к http://localhost/mysoftware
. Та же ошибка происходит и с http://localhost/mysoftware/login
.
Попробуйте удалить кэш конфигурации с помощью этой команды:
php artisan config:cache
И попробуйте это с этой конфигурацией в своем phpunit.xml
:
<server name = "APP_URL" value = "http://localhost"/>
Я сделал это. Я даже пошла дальше, выступив cache:clear
; route:clear
; route:cache
; config:clear
; config:cache
проверьте новое обновление
Предполагается, что эта строка находится внутри тега <php>
? В любом случае, попробовал внутри и снаружи, но все равно не работает. Попробовал вместо http://localhost
добавить http://localhost/mysoftware
, проблема осталась. Также очищал кеш каждый раз, когда менял файл phpunit.xml.
Да внутри <php>
оставь так <server name = "APP_URL" value = "http://localhost"/>
нет <server name = "APP_URL" value = "http://localhost/mysoftware"/>
Не повезло, не работает. Я только что проверил $response
через XDebug, и свойство baseContent->response
показывает мою страницу 404.blade.php
со всеми ссылками, указывающими на http://localhost/
вместо http://localhost/mysoftware
.
Решено.
Не знаю почему, но все заработало, изменив файл .env
на этот:
APP_URL=http://localhost/mysoftware
к этому
APP_URL=http://localhost
Нет необходимости менять файл phpunit.xml (по крайней мере, в моем случае...)
есть ли в вашем файле маршрутов маршрут, который ссылается на
/
?