Исключение InvalidArgumentException: действие App Http Controllers App Http Controllers OrderController@магазин не определен

#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 .