Тестирование Phpunit контроллера Laravel 5.1

1

Я немного застрял в этом вопросе, ни один другой вопрос о 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?

Теги:
rest
laravel-5
laravel-5.1

1 ответ

1
Лучший ответ

Причина, по которой ваш журнал пуст, состоит в том, что этот вызов $request->json('title') фактически возвращает массив, а не строку.

https://github.com/illuminate/http/blob/master/Request.php#L552

Правильный способ доступа к ключу выглядит так:

Log::debug('title: ' . $request->title);

Как описано здесь:

http://laravel.com/docs/5.1/requests#retrieving-input

  • 0
    Это звучит интересно, когда при отправке запроса через тест код $request->title возвращает заголовок, а при отправке запроса через плагин моего браузера код $request->json('title') возвращает заголовок (и $request->title также работает, если я правильно установил тип содержимого). Спасибо за помощь, но это оставляет меня сомнительным. Тем более, что я никогда не слышал о таких понятиях, как HTTP-запрос «ввод».
  • 0
    Правильно. Я думаю, что термин «ввод» относится к входным данным как к «вводу данных формы», что немного звучит в контексте отдыха, я думаю, да ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню