带有 Laravel 和 Inertia 的 PHPUnit assertDatabaseHas
PHPUnit assertDatabaseHas with Laravel and Inertia
我有一个使用 Intertia.js 的 Laravel 8 设置。我正在尝试测试我的 post 路由以存储新资源,并想使用 assertDatabaseHas()
方法断言数据库已存储新记录。
Controller.php
public function store(SlotCreate $request): RedirectResponse
{
$slot = CreateSlot::dispatchNow($request);
return redirect()->back()->with([
'message' => 'Slot Created Successfully.',
'slot' => new SlotResource($slot)
]);
}
CreateSlotTest.php
public function testCreateSlot()
{
$response = $this->actingAs($this->teamAdminOne)->post('/slots', [
'start_time' => '09:00',
'end_time' => '10:00',
'max_bookings' => 3
]);
$response->assertStatus(302);
$this->assertDatabaseHas('slots', [
'id' => ???
'team_id' => $this->teamAdminOne->currentTeam(),
'start_time' => '09:00',
'end_time' => '10:00',
'max_bookings' => 3
]);
}
当我调试会话时,我可以看到我添加到 with()
方法的插槽,但我不知道如何访问它。
我想知道我是否在控制器中正确返回插槽,如果是,我如何访问响应以断言数据库是否有此记录?
实际上,当您调用 redirect()->with()
时,它会通过调用 session()->flush()
方法将变量添加到会话中。所以在这种情况下,您可以通过 Illuminate\Support\Facades\Session
facade.
检索变量
$slot = Illuminate\Support\Facades\Session::get('slot')
我有一个使用 Intertia.js 的 Laravel 8 设置。我正在尝试测试我的 post 路由以存储新资源,并想使用 assertDatabaseHas()
方法断言数据库已存储新记录。
Controller.php
public function store(SlotCreate $request): RedirectResponse
{
$slot = CreateSlot::dispatchNow($request);
return redirect()->back()->with([
'message' => 'Slot Created Successfully.',
'slot' => new SlotResource($slot)
]);
}
CreateSlotTest.php
public function testCreateSlot()
{
$response = $this->actingAs($this->teamAdminOne)->post('/slots', [
'start_time' => '09:00',
'end_time' => '10:00',
'max_bookings' => 3
]);
$response->assertStatus(302);
$this->assertDatabaseHas('slots', [
'id' => ???
'team_id' => $this->teamAdminOne->currentTeam(),
'start_time' => '09:00',
'end_time' => '10:00',
'max_bookings' => 3
]);
}
当我调试会话时,我可以看到我添加到 with()
方法的插槽,但我不知道如何访问它。
我想知道我是否在控制器中正确返回插槽,如果是,我如何访问响应以断言数据库是否有此记录?
实际上,当您调用 redirect()->with()
时,它会通过调用 session()->flush()
方法将变量添加到会话中。所以在这种情况下,您可以通过 Illuminate\Support\Facades\Session
facade.
$slot = Illuminate\Support\Facades\Session::get('slot')