Коротко: я не могу протестировать свой собственный API из-за текущей используемой переменной среды APP_URL.
APP_URL содержит http://localhost: 8080 / имя_фолдера , тогда как foldername
это случайный символ строки, который очень важен для нашей среды разработки. Если я попытаюсь запустить тест из приведенного ниже фрагмента, мой бэкэнд получит путь типа foldername/api/users
вместо api/users
- Конечно, это не будет работать.
Проблема: я не могу изменить APP_URL внутри. env-файл или файл phpunit. xml. Я должен решить это программно. Как я могу отключить это «имя_фолдера»?
Long:
Я хотел протестировать свой собственный API, который я встроил в Laravel, но каждый тест не удался с "invalid JSON был возвращен с маршрута "- что странно, потому что я знаю, что мой API работает. (запросы с топором ios возвращают правильный json)
Тест очень базовый c и выглядит так:
namespace Tests\Feature;
use Tests\TestCase;
class UserTest extends TestCase {
public function test_get_users() {
$response = $this->json('GET', url('/api/users')); //falsely tests foldername/api/users
$response->assertJsonCount(1);
}
}
Маршруты определены в маршрутах /api.php file:
Route::resource('users', 'UserController');
Я решил перехватить и выгрузить запрошенный маршрут в одном из используемых промежуточных программ через $request->path()
и получил вывод, упомянутый выше.
I сначала попробовал, не используя встроенный помощник url, но с еще худшими результатами - возможно, эти ошибки коррелируют, но я не вижу, как.
$this->json('GET', '/api/users'); //received as '/' instead - no route at all
Добавление этой строки в phpunit. xml не сделал сделать что-нибудь, и даже если это произойдет, жестко закодированный "localhost: 8080" не будет делать. У нас много разных систем с разными app_urls, но в конце каждой из них есть «имя_фолдера», которое нужно игнорировать.
<server name="APP_URL" value="http://localhost:8080"/>
Я изменил APP_URL в своем файле .env и очистил все кэши, которые сделали тесты работающими, но сломали остальную часть программы.
Мы используем Laravel 6.5 и php 7.4