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

如何解决Laravel中Auth门面Mocking不生效的问题

问题原因

你仅为Auth门面配置了user()方法的Mock预期,但Laravel底层的AuthManager在处理请求的认证流程时,还会自动调用userResolver()方法,你没有为该方法设置预期,因此Mockery抛出了对应异常。

解决方案

方案一(优先推荐):使用Laravel内置的测试认证方法

Laravel测试套件自带的actingAs()方法已经帮你处理了所有Auth相关的底层调用,完全不需要手动Mock Auth门面,写法更简洁也不会出现遗漏方法的问题:

$user = User::factory()->create();

$response = $this->actingAs($user)
    ->postJson(route('api.login'), [
        'username' => 'username',
        'password' => 'test-password'
    ])
    ->assertOk();

方案二:补全所有需要调用的方法的Mock预期

如果你确实因为特殊的用户数据源逻辑无法使用默认的actingAs()方法,需要手动Mock Auth门面,只需要补全userResolver()方法的预期即可:

$user = User::factory()->create();
Auth::shouldReceive('user')->andReturn($user);
// 补全userResolver方法的预期,返回返回用户实例的闭包
Auth::shouldReceive('userResolver')->andReturn(fn() => $user);

$response = $this->postJson(route('api.login'), [
    'username' => 'username',
    'password' => 'test-password'
])->assertOk();

如果后续运行还有其他方法未设置预期的报错,对应补充对应方法的Mock规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:57:04