Laravel Illuminate仅在开始时刷新DB的测试方法



我有一个每天运行并从数据库中删除一些信息的代码
我正试图使用artisan的测试功能来测试这段代码,并希望能够在phpmyadmin上看到最终结果,但如果我添加IlluminateFoundationTestingRefreshDatabase,DB似乎会在开始时刷新,并在结束时刷新

有没有办法只在开始时刷新数据库

这是我的代码的缩短示例:

namespace TestsFeature;
use IlluminateFoundationTestingRefreshDatabase;
use ServerModelsUser;
use ServerModels...; //call multiple models
use TestsTestCase;
class TestRemoveCertainData extends TestCase
{
use RefreshDatabase;
public function removeCertainData()
{
//create all necessary data using factory
factory(User::class)->create(); // etc...

//should run the code that deletes certain data
$this->artisan('remove_data_command')->assertSuccessful();
}
}

因此,在我运行php artisan test TestsFeatureTestRemoveCertainData之后,我想检查php artisan remove_data_command是否按照我在phpmyadmin面板上的预期工作。

我找不到它的方法。
但我所理解的是,保留数据库并自己检查的想法是错误的

Laravel测试本身应该是将来某个人可以用一个简单的命令运行的东西,比如php artisan test --group=my_group_name
因此,解决此问题的正确方法是添加断言并将表与您的期望值进行比较。

namespace TestsFeature;
use IlluminateFoundationTestingRefreshDatabase;
use ServerModelsUser;
use ServerModels...; //call multiple models
use TestsTestCase;
class TestRemoveCertainData extends TestCase
{
use RefreshDatabase;
public function testRemoveCertainData()
{

$users = [
$this->createUserType1(),
$this->createUserType2(),
$this->createUserType3(),
$this->createUserType4(),
];

// deletes emails for users of type 2 and 4
$this->artisan('delete_certain_emails')->assertSuccessful();
// expecting the emails of user 2 and 4 to disappear
$expected = [
$users[0]->mail,
null,
$users[2]->mail,
null,
];
$result = User::pluck('mail')->toArray();
$this->assertEquals($expected, $result);
}
}

最新更新