Неверный JSON был возвращен из маршрута, модульное тестирование Laravel 8

#php #laravel #api #unit-testing

#php #laravel #API #модульное тестирование

Вопрос:

Я очень новичок в тестировании в Laravel, я работаю в laravel 8, функция, которую я хочу протестировать, это :

Когда я запускаю свой тест, я получаю эту ошибку:

 1) TestsUnitappTestHttpTestControllersTestOrderControllerTest::testStore
Invalid JSON was returned from the route.
  

Спасибо за любую помощь!

Ответ №1:

У вас есть два сценария

  1. В вашем контроллере вы можете сделать
 return response()->json([
     'order' => $newOrder,
     'status' => ($request->doValidate) ? 'pend' : 'draft'
]);
  

и ваш тестовый пример будет таким же

  1. В вашем контроллере вы можете сделать
 return response()->json($newOrder);
// or
return $newOrder;
  

и в вашем тестовом примере вы будете делать

 public function testStore()
{
    Sanctum::actingAs($this->user, ['*']);
    $response = $this->postJson(action('OrderController@store'), [
        'doAssigned' => false,
        'doValidate' => false,
    ]);

    $response->assertJsonFragment([
        'status' => 'draft'
    ]);
} 
  

Комментарии:

1. Большое вам спасибо за вашу помощь, но я все еще в замешательстве, я все еще получаю ту же ошибку даже после внесения изменений . Tests Unit AppTest HttpTest ControllersTest OrderControllerTest::testStore Неверный JSON был возвращен из маршрута

2. Использовали ли вы return response()->json($newOrder); и dd($newOrder); перед его возвратом и вставили результат в свой вопрос.

3. Да, я использовал return response()->json($newOrder); dd($newOrder); бит и, я все еще получаю ту же ошибку

4. Я полагаю, что ваш код где-то выдает ошибку, поэтому вам нужно сделать $response = $this->postJson(action('OrderController@store'), [ 'doAssigned' => false, 'doValidate' => false, ])->dump(); и посмотреть, какой результат вы получили.