我试图在我公司的项目中实施单元测试,并且在尝试在我的数据库中使用单独的一组数据时遇到了一些奇怪的麻烦。
由于我希望在狭窄的环境中执行测试,我正在寻找在专用数据库中输入数据的最简单方法。长话短说,在这个程度上,我决定使用插入数据的MySQL转储。
这基本上是我的播种机代码:
public function run()
{
\Illuminate\Support\Facades\DB::unprepared(file_get_contents(__DIR__ . '/data1.sql'));
}
现在问题出在这里。 在我的单元测试中,我可以调用播种机,但是:
以下是我试过的一些相同结果:
DB::raw(file_get_contents(__DIR__.'/database/data1.sql'));
DB::statement(file_get_contents(__DIR__ . '/database/data1.sql'));
$seeder = new CheckTestSeeder();
$seeder->run();
\Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'CheckTestSeeder']);
$this->seeInDatabase('jackpot.progressive', [
'name_progressive' => 'aaa'
]);
如果我在setUpBeforeClass()和测试中执行此操作,有关如何继续以及为什么我有不同行为的任何指示将不胜感激!
答案 0 :(得分:0)
您可以按照here的说明使用Illuminate\Foundation\Testing\RefreshDatabase
特质。如果您需要更多内容,可以覆盖refreshTestDatabase
特征中的RefreshDatabase
方法。
protected function refreshTestDatabase()
{
parent::refreshTestDatabase();
\Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'CheckTestSeeder']);
}