Php Laravel-断言未软删除?逆?-拉威尔试验

Php Laravel-断言未软删除?逆?-拉威尔试验,php,laravel,testing,automated-tests,Php,Laravel,Testing,Automated Tests,Laravels测试套件有一个断言,名为 $this->assertSoftDeleted() 但有相反的情况吗?断言某些内容不是软删除的 我尝试了assertDatabaseHas,但不起作用 我是这样做的$this->assertTrue(!$goal->fresh()->trashed()) 工作完美 但是还有另一种更好、更优雅的方式吗?一些不被软删除的东西只意味着列中的已删除\u为空。如果该列为空,则可以使用assertDatabaseHas方法: $this->asser

Laravels测试套件有一个断言,名为

$this->assertSoftDeleted()
但有相反的情况吗?断言某些内容不是软删除的

我尝试了
assertDatabaseHas
,但不起作用

我是这样做的
$this->assertTrue(!$goal->fresh()->trashed())

工作完美


但是还有另一种更好、更优雅的方式吗?

一些不被软删除的东西只意味着
列中的
已删除\u为空。如果该列为空,则可以使用
assertDatabaseHas
方法:

$this->assertDatabaseHas('goals', [
    'id' => $goal->id,
    'deleted_at' => null
]);
如果您想使其更具动态性,可以使用自定义方法扩展基本的
TestCase
类,该方法将为您实现这一点,并允许您使用可读的断言名称保留测试,此外还可以为您做一些事情,如自动查找适当的表/列名:

public function assertModelNotSoftDeleted(Model $model)
{
    return $this->assertDatabaseHas($model->getTable(), [
        $model->getKeyName() => $model->getKey(),
        $model::DELETED_AT => null,
    ]);
}

如果您查看SoftDeletes.php(处理所有softdelete相关功能的php特性),您会发现没有trashed()的相反形式。您可以在使用软件的模型上创建自己的方法。