Laravel HTTP-тест для собственного API добавляет форму последней части APP_URL - PullRequest
0 голосов
/ 16 апреля 2020

Коротко: я не могу протестировать свой собственный 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

1 Ответ

0 голосов
/ 20 апреля 2020

Обошел проблему, переопределив метод setUp:

namespace Tests\Feature;

use Tests\TestCase;

class UserTest extends TestCase {
    use WithFaker;

    public function setUp(): void {
        parent::setUp();
        \URL::forceRootUrl(dirname(env('APP_URL')));
    }

    public function test_create_user() {
        $response = $this->json('GET', url('/api/users'));
        // $response->assertJson(...);
    }
}

Я до сих пор не понимаю, почему мой бэкэнд запрашивается с пустым маршрутом "/", когда я прохожу маршрут так, как это описывается в документации :

$response = $this->json('GET', '/api/users');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...