Динамическое изменение URL маршрута не отражается в пакете laravel - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю пакет, который дает файл конфигурации для настройки URL-адреса маршрута, который он будет добавлять, я вижу значения файла конфигурации в контроллере, но тот же config('app_settings.url') приходит как null в pakacge/src/routes/web.php

Route::get(config('app_settings.url'), 'SomeController')

мои тесты также дают 404 и app_settings изменение конфигурации не выбирается по маршруту.

function it_can_change_route_url_by_config() {
  // this should be default url
  $this->get('settings')
    ->assertStatus(200);

  // change the route url
  config()->set('app_settings.url', '/app_settings');

  $this->get('app_settings')
    ->assertStatus(200);

  $this->get('settings')
    ->assertStatus(400);
}

app_setting.php

return [
    'url' => 'settings',
    'middleware' => []
];

Он работает, когда я использую этот пакет, но тесты не пройдены.

Пожалуйста, помогите Как я могу дать возможность изменить URL-адрес маршрута из конфигурации.

1 Ответ

0 голосов
/ 25 сентября 2018

Если честно, я думаю, что невозможно сделать такой тест.Я пытался использовать некоторые «хакерские» решения, но тоже не получилось.

Проблема в том, что при запуске такого теста все маршруты уже загружены, поэтому изменение значения в конфигурации не влияет на текущие маршруты.

EDIT

В качестве альтернативного решения, чтобы сделать его немного тестируемым, в конфигурации я бы использовал:

<?php

return [
    'url' => env('APP_SETTING_URL', 'settings'),
    'middleware' => []
];

Тогда в phpunit.xml вы можетеset:

<env name="APP_SETTING_URL" value="dummy-url"/>

Как вы видите, я установил здесь полностью фиктивный URL, чтобы убедиться, что этот пользовательский URL будет использоваться позже, а затем тест может выглядеть следующим образом:

/** @test */
function it_works_fine_with_custom_url() 
{
    $this->get('dummy-url')
        ->assertStatus(200);

    $this->get('settings')
        ->assertStatus(404);
}

Возможно, это не такне проверяйте все, но трудно поверить, что кто-то будет использовать dummy-url в маршрутизации, а использование собственного env в phpunit.xml даст вам некоторую уверенность, что только пользовательский URL работает нормально;

...