Laravel - 断言不软删除?逆?- Laravel 测试

kry*_*160 5 php testing automated-tests laravel

Laravel 测试套件有一个名为

$this->assertSoftDeleted()
Run Code Online (Sandbox Code Playgroud)

但有相反的吗?断言某些东西没有被软删除?

我试过了,assertDatabaseHas但不起作用。

我已经这样做了 $this->assertTrue(! $goal->fresh()->trashed());

工作完美。

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

Lia*_*ett 8

没有被软删除的东西只是意味着该deleted_at列为空。您可以使用该assertDatabaseHas列为空的方法:

$this->assertDatabaseHas('goals', [
    'id' => $goal->id,
    'deleted_at' => null
]);
Run Code Online (Sandbox Code Playgroud)

如果您想让它更加动态,您可以TestCase使用自定义方法扩展您的基类,该方法将为您执行此操作并允许您使用可读的断言名称保留测试,并另外为您做一些事情,例如找到合适的表/列名称自动:

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