Laravel包测试:在使用RefreshDatabase时运行框架迁移。
P粉955063662
P粉955063662 2023-07-30 13:20:53
[PHP讨论组]

我有一个 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');
        });
    }
} 


P粉955063662
P粉955063662

全部回复(1)
P粉030479054

事实证明 Orchestra Testbench 的开发者也考虑到了这一点。你可以调用一个方法来包含 Laravel 提供的迁移文件。

/**
 * The migrations to run prior to testing.
 *
 * @return void
 */
protected function defineDatabaseMigrations() : void
{
    $this->loadLaravelMigrations();
} 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号