Модульный тест: как смоделировать запрос с параметрами маршрута в Lumen - PullRequest
0 голосов
/ 23 октября 2019

Я создал API с помощью Lumen, и теперь я тоже буду создавать методы тестирования. Хорошо, я знаю, что в TDD это может быть обратный путь.

В моем API есть метод init(Request $request) с внедренным объектом запроса. Чтобы проверить работоспособность, конечно, я должен создать пробный запрос. Я делаю это так:

$req = new Request([], [], ['param' => 'foo']);

Выглядит отлично, но объект Request инициализирован как пустой объект. Я пытаюсь проверить параметры маршрута сразу после этого:

dd($req->route('param'));

Но это дает ноль;Я потратил часы на поиски решения и нашел его, но ничего не нашел.

Есть идеи?

1 Ответ

0 голосов
/ 24 октября 2019

Проблема в том, что третьи параметры из \Illuminate\Http\Request не в том месте, где вы должны передавать параметры маршрута. Если вы посмотрите на этот класс, то обнаружите, что третьи параметры - это пользовательские атрибуты (я не знаю точно, что это).

Чтобы смоделировать запрос, вы можете использовать метод create из\Illuminate\Http\Request.

Пример. маршрут Route::post('/users/{user}', 'UsersController@store').

$request = Request::create('/users/1', 'POST', [
    'name' => 'john doe',
]);

dd($request->route('user')); // 1

Вот подробности:

/**
 * Creates a Request based on a given URI and configuration.
 *
 * The information contained in the URI always take precedence
 * over the other information (server and parameters).
 *
 * @param string               $uri        The URI
 * @param string               $method     The HTTP method
 * @param array                $parameters The query (GET) or request (POST) parameters
 * @param array                $cookies    The request cookies ($_COOKIE)
 * @param array                $files      The request files ($_FILES)
 * @param array                $server     The server parameters ($_SERVER)
 * @param string|resource|null $content    The raw body data
 *
 * @return static
 */
public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
    ....
}
...