Laravel套件測試:在使用RefreshDatabase時執行框架遷移。
P粉955063662
2023-07-30 13:20:53
<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>
事實證明 Orchestra Testbench 的開發者也考慮到了這一點。你可以呼叫一個方法來包含 Laravel 提供的遷移檔。
/** * The migrations to run prior to testing. * * @return void */ protected function defineDatabaseMigrations() : void { $this->loadLaravelMigrations(); }