gpt4 book ai didi

testing - Lumen - 单元测试中的播种机

转载 作者:行者123 更新时间:2023-11-28 20:51:02 26 4
gpt4 key购买 nike

我正在尝试在我公司的项目中实现单元测试,但我在尝试使用我的数据库中的一组单独数据时遇到了一些奇怪的问题。

由于我希望在受限环境中执行测试,因此我正在寻找在专用数据库中输入数据的最简单方法。长话短说,在这个程度上,我决定使用插入数据的 MySQL 转储。

这基本上是我的播种器代码:

public function run()
{
\Illuminate\Support\Facades\DB::unprepared(file_get_contents(__DIR__ . '/data1.sql'));
}

问题来了。在我的单元测试中,我可以调用播种机,但是:

  • 如果我在 setUpBeforeClass() 中调用播种器,它就会工作。虽然它不符合我的需求,因为我希望能够为不同的测试调用不同的数据集
  • 如果我在测试中调用播种器,数据永远不会插入到数据库中(无论是否具有事务特征)。
  • 如果我在不使用原始 sql 文件的情况下使用 DB::insert 而不是::raw 或::unprepared 或::statement,它就可以工作。但是我的插入内容太复杂了。

以下是我尝试过的一些方法,结果相同:

    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() 和测试中这样做时我有不同行为的指示将不胜感激!

最佳答案

您可以使用 Illuminate\Foundation\Testing\RefreshDatabase 特性,如 here 所述.如果您需要更多东西,您可以重写 RefreshDatabase 特征中的 refreshTestDatabase 方法。

protected function refreshTestDatabase()
{
parent::refreshTestDatabase();

\Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'CheckTestSeeder']);
}

关于testing - Lumen - 单元测试中的播种机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com