搜尋

首頁  >  問答  >  主體

Laravel套件測試:在使用RefreshDatabase時執行框架遷移。

<p>我有一個 Laravel 包,使用遷移向預設的使用者表(隨 Laravel 一起提供的)新增了一個欄位:</p> <pre class="brush:php;toolbar:false;">public function up() : void { Schema::table('users', function (Blueprint $table) { $table->enum('role', ['super-admin', 'admin', 'tipster', 'user'])->default('user'); }); } </pre> <p>當我想要執行我的單元測試時,這會導致我的測試失敗,因為在我的套件中,預設的使用者表不存在。 </p><p>在使用這個 trait 時,是否有一種方法可以運行框架提供的遷移?我已經使用了一個解決方法來修復這個問題,但我真的不希望只是為了單元測試而修改程式碼。 </p><p><br /></p> <pre class="brush:php;toolbar:false;">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'); }); } }<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;"> </span></span> </pre> <p><br /></p>
P粉955063662P粉955063662485 天前367

全部回覆(1)我來回復

  • P粉030479054

    P粉0304790542023-07-31 10:22:25

    事實證明 Orchestra Testbench 的開發者也考慮到了這一點。你可以呼叫一個方法來包含 Laravel 提供的遷移檔。

    /**
     * The migrations to run prior to testing.
     *
     * @return void
     */
    protected function defineDatabaseMigrations() : void
    {
        $this->loadLaravelMigrations();
    } 

    回覆
    0
  • 取消回覆