我有一个 Laravel 包,使用迁移向默认的用户表(随 Laravel 一起提供的)添加了一个字段:
public function up() : void
{
Schema::table('users', function (Blueprint $table) {
$table->enum('role', ['super-admin', 'admin', 'tipster', 'user'])->default('user');
});
}
当我想要运行我的单元测试时,这会导致我的测试失败,因为在我的包中,默认的用户表不存在。
在使用这个 trait 时,是否有一种方法可以运行框架提供的迁移?我已经使用了一个解决方法来修复这个问题,但我真的不希望仅仅为了单元测试而修改代码。
public function up() : void
{
if (App::runningUnitTests())
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->enum('role', ['super-admin', 'admin', 'tipster', 'user'])->default('user');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
else
{
Schema::table('users', function (Blueprint $table) {
$table->enum('role', ['super-admin', 'admin', 'tipster', 'user'])->default('user');
});
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
事实证明 Orchestra Testbench 的开发者也考虑到了这一点。你可以调用一个方法来包含 Laravel 提供的迁移文件。
/** * The migrations to run prior to testing. * * @return void */ protected function defineDatabaseMigrations() : void { $this->loadLaravelMigrations(); }