#laravel #api #unit-testing #controller #laravel-8
#laravel #API #модульное тестирование #контроллер #laravel-8
Вопрос:
Я новичок в модульном тестировании и использую Laravel 8 ,
Я всегда получаю эту ошибку :
InvalidArgumentException: Action AppHttpControllersAppHttpControllersOrderController@store not defined.
Спасибо за любую помощь!
Ответ №1:
В вашем тестовом примере вам нужно добавить
перед вашим пространством имен, чтобы получить абсолютный путь
$response = $this->postJson(action('AppHttpControllersOrderController@store'), [
'doAssigned' => false,
'doValidate' => false,
]);
Кроме того, вы можете вызвать action
контроллер без пространства имен, например action('OrderController@store')
Комментарии:
1. Спасибо, но после внесения изменений я получил сообщение об ошибке в строке ` $response-> assertJsonPath(‘status’, ‘draft’);` ошибка заключается в том, что «Неверный JSON был возвращен с маршрута».
2. Я не вижу никакого JSON с
status:draft
возвращенным из вашего метода контроллера, вы можете сделать$this->postJson(...)->dump()
, чтобы увидеть, что вернулось.3. после
dump()
добавления я получаюError: Call to a member function dump() on string
, моя главная цель — проверить, что я получаюstatus = 'draft'
, когда мой `doAssigned’ => false, and
doValidate’ => false`,4. В вашем контроллере вам нужно вернуть
return response()->json(['order' => $newOrder, 'status' => 'draft']);
5. В моем контроллере я не уверен, могу ли я установить «статус» на «черновик», потому что статус может быть «черновик» или «ожидающий» в зависимости от dovalidate и doAssigned , в моем тесте я хочу протестировать только случай, когда для doValidate и doAssigned установлено значение false @mmabdelgawad .