Laravel 中的单元测试:设置当前经过身份验证的用户时出错

Posted

技术标签:

【中文标题】Laravel 中的单元测试:设置当前经过身份验证的用户时出错【英文标题】:Unit Testing in Laravel: Error when setting the Currently Authenticated User 【发布时间】:2014-09-21 20:40:50 【问题描述】:

在我的 Laravel 单元测试中,我使用下面的代码设置当前经过身份验证的用户。这正是 Laravel 在他们的网站上记录它的方式。我使用 Laravel 提供的默认 User 模型。

public function testLoggedInUserCanCreateCat() 
        Route::enableFilters();
        $user = new User(array(
            'name' => 'john'
        ));
        $this->be($user);
        $this->call('GET', '/cats/create');
        $this->assertResponseOk();
    

由于某种原因,当我在 SSH 中运行 phpunit 时,出现以下错误:

1) GlobalTest::testLoggedInUserCanCreateCat
Illuminate\Database\Eloquent\MassAssignmentException: name

有人知道这里出了什么问题吗?我在互联网上搜索了几个小时,但找不到任何帮助..

【问题讨论】:

【参考方案1】:

问题出在错误中:

MassAssignmentException: 名称

您正在尝试批量分配变量 name - 但您的模型不允许这样做。

从此更改您的用户模型:

protected $fillable = [];

到这里:

protected $fillable = ['name'];

你可以read more about mass assignment here.

【讨论】:

以上是关于Laravel 中的单元测试:设置当前经过身份验证的用户时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vuejs 和 Laravel 获取当前经过身份验证的用户 ID?

Laravel 7 将默认守卫更改为员工,但当前经过身份验证的用户返回 null

如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?

负载测试经过身份验证的用

laravel 单元测试设置模拟时间

laravel 单元测试设置模拟时间