You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pest测试Laravel Filament V3应用时返回403状态码问题

Laravel Filament V3 Pest测试403错误排查

问题描述

刚接触Pest,测试Laravel Filament(V3)应用时,访问ClientResource的列表页测试一直返回403权限错误。

相关代码

User Factory

public function definition(): array
{
    return [
        'name' => fake()->name(),
        'email' => fake()->unique()->safeEmail(),
        'created_at' => now()->subDays(3),
        'updated_at' => now()->subDays(2),
        'email_verified_at' => now()->subDay(),
        'password' => Hash::make('password'),
        'remember_token' => Str::random(10),
    ];
}

TestCase.php的初始化方法

protected function setUp(): void
{
    parent::setUp();

    $this->actingAs(User::factory()->create());
}

ClientTest.php测试用例

it('can render page', function () {
    $this->get(ClientResource::getUrl('index'))->assertSuccessful();
});

错误提示

Expected response status code [>=200, <300] but received 403.

解决思路

  • 用户无Filament访问权限:Filament默认会校验用户是否有权限访问面板。最简单的测试方案是在User模型里直接开放面板访问权限:
    // 在User模型中添加该方法
    public function canAccessPanel(\Filament\Panel $panel): bool
    {
        return true; // 测试环境下直接放行,生产环境再做严格权限控制
    }
    
  • 多面板场景未指定面板:如果你的应用有多个Filament面板,需要在测试初始化时指定当前面板,确保用户关联到正确的面板权限:
    use Filament\Facades\Filament;
    
    protected function setUp(): void
    {
        parent::setUp();
    
        $user = User::factory()->create();
        Filament::setCurrentPanel('admin'); // 替换成你实际的面板ID
        $this->actingAs($user);
    }
    
  • 资源需要特定角色权限:如果你的ClientResource设置了角色访问限制,要给测试用户分配对应的角色。比如在创建用户时关联管理员角色:
    // 修改TestCase中的setUp方法
    protected function setUp(): void
    {
        parent::setUp();
    
        // 假设你有Role模型,先创建管理员角色再关联给用户
        $adminRole = \App\Models\Role::factory()->create(['name' => 'admin']);
        $user = \App\Models\User::factory()->create();
        $user->roles()->attach($adminRole);
    
        $this->actingAs($user);
    }
    

内容的提问来源于stack exchange,提问作者El Klo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:39:52