【发布时间】:2021-07-30 05:54:07
【问题描述】:
这是我的测试:
public function test_only_admin_can_create_series()
{
$this->withoutExceptionHandling();
$this->actingAs(User::factory()->make());
$this->get('/admin/series/create')
->assertRedirect('/');
}
使用工厂的create方法失败,使用工厂的make方法失败:
$this->actingAs(User::factory()->make()); <==== PASSES
$this->actingAs(User::factory()->create()); <==== FAILS
我想知道为什么会这样???? 首先,我通过工厂创建用户并充当该用户,然后进入受限路线。该路线仅供管理员使用。但是当我使用工厂的 create 方法时,这个测试失败了,但当我使用工厂的 make 方法时,这个测试通过了。
失败时的错误是:
FAIL Tests\Feature\CreateSeriesTest
⨯ only admin can create series
---
• Tests\Feature\CreateSeriesTest > only admin can create series
Illuminate\Database\QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: users.username (SQL: insert into "users" ("name", "email", "email_verified_at", "password", "remember_token", "updated_at", "created_at") values (Patsy Hackett, albin.lindgren@example.net, 2021-05-08 00:49:32, $2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, ida9HDyPdX, 2021-05-08 00:49:32, 2021-05-08 00:49:32))
at C:\xampp\htdocs\sandcasts\vendor\laravel\framework\src\Illuminate\Database\Connection.php:678
674▕ // If an exception occurs when attempting to run a query, we'll format the error
675▕ // message to include the bindings with SQL, which will make this exception a
676▕ // lot more helpful to the developer instead of just the database's errors.
677▕ catch (Exception $e) {
➜ 678▕ throw new QueryException(
679▕ $query, $this->prepareBindings($bindings), $e
680▕ );
681▕ }
682▕
1 C:\xampp\htdocs\sandcasts\vendor\laravel\framework\src\Illuminate\Database\Connection.php:471
PDOException::("SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: users.username")
2 C:\xampp\htdocs\sandcasts\vendor\laravel\framework\src\Illuminate\Database\Connection.php:471
PDOStatement::execute()
Tests: 1 failed
Time: 0.49s
【问题讨论】:
-
失败信息是什么?
-
@IGP 我已经更新了问题,请看看...
-
检查您的用户工厂中的定义是否包含“用户名”属性。如果没有,那就可以解释为什么它会抛出一个非空约束违规。
-
同时检查“用户名”是否包含在您的用户模型的 $fillable 属性中
-
非常感谢,我修改了 laravel/ui 包中的默认用户模型并添加了用户名,但用户工厂没有相应修改。因此我面临错误。非常感谢您再次提供帮助@IGP