You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel测试中是否存在assertSoftDeleted的反向断言?

验证模型未被软删除的Laravel原生优雅方式

好问题!你现在用的$this->assertTrue(! $goal->fresh()->trashed());确实能解决问题,但Laravel测试套件里其实有更贴合原生风格的方法,分两种情况来说:

  • Laravel 8+ 版本:使用assertModelExists
    从Laravel 8开始,测试套件新增了assertModelExists方法,它会自动验证模型对应的数据库记录存在且未被软删除(内部会检查deleted_at字段是否为null)。用法非常简洁:

    $this->assertModelExists($goal);
    

    这个方法完全替代了你手动判断trashed()的逻辑,既优雅又符合Laravel测试的设计规范。

  • Laravel 7及更早版本:结合assertDatabaseHas检查软删除字段
    如果你的项目还在用较旧的Laravel版本,可以直接用assertDatabaseHas来验证deleted_at字段为null,这也是原生的解决方案:

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

    这种写法直接针对数据库字段做断言,逻辑清晰,比手动调用fresh()->trashed()更贴合测试套件的断言风格。

另外补充一句:你当前的实现完全没问题,但用原生断言方法会让测试代码更易读,也和Laravel测试的整体风格保持一致。

内容的提问来源于stack exchange,提问作者krystian2160

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:32:43