Testen von Laravel-Paketen: Ausführen von Framework-Migrationen bei Verwendung von RefreshDatabase.
P粉955063662
2023-07-30 13:20:53
<p>Ich habe ein Laravel-Paket, das mithilfe von Migrationen ein Feld zur Standardbenutzertabelle (die mit Laravel geliefert wird) hinzugefügt hat: </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>Wenn ich meine Komponententests ausführen möchte, schlägt dies fehl, da in meinem Paket die Standardbenutzertabelle nicht vorhanden ist. </p><p>Gibt es eine Möglichkeit, die vom Framework bereitgestellten Migrationen auszuführen, wenn dieses Merkmal verwendet wird? Ich habe eine Problemumgehung verwendet, um das Problem zu beheben, aber ich möchte den Code wirklich nicht nur für Unit-Tests ändern. </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();
});
}
anders
{
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(); }