Как я могу изменить URL приложения для модульного тестирования? - PullRequest
2 голосов
/ 06 июня 2019

У меня есть функция, которая требует, чтобы URL работал.Я пытаюсь выполнить модульное тестирование, так как его поведение изменяется в зависимости от параметров запроса url.

MyServiceTest.php

function testMyTestFunction() {
    $service = new MyService();

    // Some how change the url for the app. This doesn't work
    config(['app.url' => 'http://test.test?myNewParam=5']);

    $service->test();
}

MyService.php

function test() {
    // Does not contain `myNewParam`
    $url = url()->full();

    // do some logic
}

I 'Мы также пытались смоделировать запрос, так как это то, на что ссылается вспомогательная функция url(), но мне не повезло, что я сделал это успешно.

1 Ответ

3 голосов
/ 06 июня 2019

Когда вы используете url()->full();, возвращается текущий URL полного запроса, а не тот, который установлен в конфигурации. Так что при использовании этого:

config(['app.url' => 'http://test.test?myNewParam=5']);

тогда вы можете получить значение следующим образом: config('app.url').

Если вы хотите получить параметр через помощника url, вам нужно будет сделать запрос к маршруту контроллера, который использует вашу службу, например:

$this->get('/test?myNewParam=5')->assert...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...