Я немного застрял в этом вопросе, ни один другой вопрос о SO не помог мне.
Я использую Laravel 5.1 и phpunit для тестирования остаточного контроллера. Мой тестовый код выглядит следующим образом:
$this->post('/api/book', [ 'title' => 'my book'])
->assertResponseOk();
И целевой контроллер имеет, помимо прочего, следующий код:
Log::debug('title: ' . $request->json('title'));
т.е. на стороне тестирования я ожидаю использовать метод TestCase :: post() для отправки запроса, и на стороне сервера я ожидаю использовать метод Request :: json() для чтения из запроса. Однако, когда я смотрю на журналы, я вижу следующую пустую строку
[2015-10-31 17:26:01] testing.DEBUG: title:
Это показывает, что либо мой тестовый код не устанавливает правильные данные в запросе, либо мой код сервера не читает запрос должным образом. Кстати, сервер также не работает еще немного, отражая недостающее значение названия в журналах.
Я также использую плагин Firefox RESTClient для ручного тестирования своего веб-приложения, и мне нужно было правильно настроить тело (используя двойные кавычки вокруг ключа title
, строго соблюдая спецификации JSON), чтобы убедиться, что код сервера работает. Таким образом, точный формат - это след, за которым я последовал, без успеха до сих пор.
Поэтому мой вопрос: какой наиболее рекомендуемый код используется для контроллера RESTful на тестировании и на стороне сервера, в Laravel 5.1?
Причина, по которой ваш журнал пуст, состоит в том, что этот вызов $request->json('title')
фактически возвращает массив, а не строку.
https://github.com/illuminate/http/blob/master/Request.php#L552
Правильный способ доступа к ключу выглядит так:
Log::debug('title: ' . $request->title);
Как описано здесь:
$request->title
возвращает заголовок, а при отправке запроса через плагин моего браузера код$request->json('title')
возвращает заголовок (и$request->title
также работает, если я правильно установил тип содержимого). Спасибо за помощь, но это оставляет меня сомнительным. Тем более, что я никогда не слышал о таких понятиях, как HTTP-запрос «ввод».