doukou1718 2018-05-14 02:37
浏览 104
已采纳

Laravel - 声明没有软删除? 逆? - Laravel测试

Laravels test suite has an assertion called

$this->assertSoftDeleted()

But is there the inverse? To assert that something is not soft deleted?

I've tried assertDatabaseHas but doesn't work.

I have done it this way $this->assertTrue(! $goal->fresh()->trashed());

Works perfect.

But is there another, better, more ---elegant--- and laravel's way?

  • 写回答

1条回答 默认 最新

  • dtpf76658 2018-05-14 02:59
    关注

    Something not being soft deleted just means that the deleted_at column is null. You could use the assertDatabaseHas method where that column is empty:

    $this->assertDatabaseHas('goals', [
        'id' => $goal->id,
        'deleted_at' => null
    ]);
    

    If you wanted to make this a bit more dynamic, you could extend your base TestCase class with a custom method that will do this for you and allow you to keep your tests with a readable assertion name, and additionally do things for you like find the appropriate table/column names automatically:

    public function assertModelNotSoftDeleted(Model $model)
    {
        return $this->assertDatabaseHas($model->getTable(), [
            $model->getKeyName() => $model->getKey(),
            $model::DELETED_AT => null,
        ]);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?