Добрый день.
Есть тест для обновления услуги:
class ServiceTest extends TestCase
{
use WithFaker;
use DatabaseTransactions;
public function test_category_update_success(): void
{
$this->withoutMiddleware();
$this->signInAdmin();
$service = factory(Service::class)->create([
'parent_id' => function () {
return Service::find(2)->id;
}
]);
$putArr = [
'name' => $this->faker->name,
'parent_id' => Service::find(1)->id
];
$response = $this->put(route('admin.services.update', $service), $putArr);
throw $response->exception;
$this->assertDatabaseHas('services', $putArr);
$response
->assertStatus(302)
->assertRedirect(route('admin.services.show', $service))
->assertSessionHas('success', __('messages.success'));
}
protected function signInAdmin()
{
$user = factory(User::class, 'admin')->create();
$this->actingAs($user);
return $user;
}
}
Есть определенный метод контроллера.
class ServicesController extends Controller
{
public function update(ServiceRequest $request, Service $service)
{
throw new Exception(print_r([
'Controller',
'$service->id' => $service->id,
'$request->all' => $request->all()
]));
$service->name = $request['name'];
$service->save();
return redirect()->route('admin.services.show', $service)->with('success', __('messages.success'));
}
}
Намеренно вызываю исключение в
ServicesController::update, чтобы получить данные:
В варианте с тестом получаю пустой
$service->id:
Array
(
[0] => Controller
[$service->id] =>
[$request->all] => Array
(
[name] => Ayden Ondricka Jr.
[parent_id] => 1
)
)
Если в режиме отправки формы из браузера, то
$service->id получаю:
(
[0] => Controller
[$service->id] => 1126
[$request->all] => Array
(
[name] => Ayden Ondricka Jr.
[parent_id] => 1
)
)
Распечатка роутов:
| | GET|HEAD | admin/services | admin.services.index | App\Http\Controllers\Admin\ServicesController@index | web,auth,can:admin-panel |
| | POST | admin/services | admin.services.store | App\Http\Controllers\Admin\ServicesController@store | web,auth,can:admin-panel |
| | GET|HEAD | admin/services/create | admin.services.create | App\Http\Controllers\Admin\ServicesController@create | web,auth,can:admin-panel |
| | DELETE | admin/services/{service} | admin.services.destroy | App\Http\Controllers\Admin\ServicesController@destroy | web,auth,can:admin-panel |
| | PUT|PATCH | admin/services/{service} | admin.services.update | App\Http\Controllers\Admin\ServicesController@update | web,auth,can:admin-panel |
| | GET|HEAD | admin/services/{service} | admin.services.show | App\Http\Controllers\Admin\ServicesController@show | web,auth,can:admin-panel |
| | GET|HEAD | admin/services/{service}/edit | admin.services.edit | App\Http\Controllers\Admin\ServicesController@edit | web,auth,can:admin-panel |
Также в теле метода теста распечатывал роуты, чтобы убедиться, что формируются корректно:
throw new Exception(print_r([
'$routeUpdate' => route('admin.services.update', $service),
'$routeShow' => route('admin.services.show', $service)
]));
Вывод корректный:
[$routeUpdate] => localhost/admin/services/1676[$routeShow] => localhost/admin/services/1676
Подскажите пожалуйста, почему тест стежит?