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

Laravel测试调用actingAs()报错:传入Collection而非Authenticatable实现类

错误原因

actingAs()方法要求传入的第一个参数是实现了Illuminate\Contracts\Auth\Authenticatable接口的单个用户实例,你当前的代码存在两个问题触发了报错:

  1. 测试代码中User::factory(3)->create()传入了数量参数3,执行后返回的是包含3个用户模型的Illuminate\Database\Eloquent\Collection集合对象,并非单个用户实例,直接传入actingAs()就会触发类型不匹配错误。
  2. User模型存在trait重复引入问题:你的User类已经继承了Illuminate\Foundation\Auth\User(别名Authenticatable),该父类已经内置了Authenticatable接口的实现,类内部额外写use Authenticatable属于重复加载,可能引发逻辑异常。

解决方案

1. 修正测试代码

如果只需要单用户登录测试,直接不传数量参数调用工厂,得到单个用户实例:

public function test_can_get_clipart()
{
    $this->withoutExceptionHandling();

    // 不传参数,生成单个用户实例
    $user = User::factory()->create();
    $this->actingAs($user, 'api');

    $this->getJson('/api/cliparts')
        ->assertStatus(201);
}

如果确实需要批量生成3个用户再取其中一个登录,改为取集合的第一个元素即可:

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

2. 修正User模型

删除User类中重复的trait引入即可:

class User extends Authenticatable
{
    // 删掉重复的Authenticatable引用,保留其他trait
    use HasFactory, Notifiable, HasApiTokens, Uuid;

    // 剩余原有代码保持不变
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

修改完成后重新运行测试即可解决该报错。

内容的提问来源于stack exchange,提问作者Bình Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:30:02