PHPUnit Larvel 在测试前执行一次
PHPUnit Larvel execute ONCE before testing
我使用 Laravel 8 和 PHPUnit 9.3.3
现在我在CreatesApp.php
写了:
namespace Tests;
use App\Models\User;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\Artisan;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
Artisan::call('migrate:reset');
Artisan::call('migrate');
\App\Models\User::factory(10)->create();
\App\Models\Post::factory(10)->create();
return $app;
}
}
此代码执行每个测试,我希望此代码仅在测试前执行:
Artisan::call('migrate:reset');
Artisan::call('migrate');
\App\Models\User::factory(10)->create();
\App\Models\Post::factory(10)->create();
如果您只想在启动时执行一些命令 - 您可以 bootstrap 使用您自己的 boostraper 进行测试:docs
但是,你的方法不对:
必须隔离测试:必须为每个测试执行迁移
为此 - 将 DatabaseMigrations 特性添加到您的测试中。
use DatabaseMigrations;
对于创建实体 - 使用 seeders
用于测试的种子数据库 - 覆盖 setUp 方法
public function setUp(): void
{
parent::setUp();
$this->seed();
}
顺便说一句,也许您对迁移的测试速度感到沮丧 - 看看这个 article - 它显着提高了性能
我使用 Laravel 8 和 PHPUnit 9.3.3
现在我在CreatesApp.php
写了:
namespace Tests;
use App\Models\User;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\Artisan;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
Artisan::call('migrate:reset');
Artisan::call('migrate');
\App\Models\User::factory(10)->create();
\App\Models\Post::factory(10)->create();
return $app;
}
}
此代码执行每个测试,我希望此代码仅在测试前执行:
Artisan::call('migrate:reset');
Artisan::call('migrate');
\App\Models\User::factory(10)->create();
\App\Models\Post::factory(10)->create();
如果您只想在启动时执行一些命令 - 您可以 bootstrap 使用您自己的 boostraper 进行测试:docs
但是,你的方法不对:
必须隔离测试:必须为每个测试执行迁移
为此 - 将 DatabaseMigrations 特性添加到您的测试中。
use DatabaseMigrations;
对于创建实体 - 使用 seeders
用于测试的种子数据库 - 覆盖 setUp 方法
public function setUp(): void { parent::setUp(); $this->seed(); }
顺便说一句,也许您对迁移的测试速度感到沮丧 - 看看这个 article - 它显着提高了性能