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

Laravel 9删除供应商测试失败:缺少supplier路由参数求助

问题:Laravel功能测试删除供应商时提示缺少参数

我编写了功能测试验证控制器是否正常工作,但测试持续失败,报错信息如下:

Missing required parameter for [Route: admin/suppliers/destroy] [URI: admin/suppliers/{supplier}] [Missing parameter: supplier]

我已经在路由中传入参数route('admin/suppliers/destroy', $supplier),但仍出现相同错误,请问可能的原因是什么?

我的测试代码:

public function test_if_a_user_can_delete_a_supplier()
{
    //Make fake data, don't persist to database.
    $supplier = Supplier::factory()->make()->setAppends([])->makeHidden(['created_at', 'updated_at']);

    //Create an Admin User and assign the Administrator role to this new user
    $adminUser = factory(AdminUser::class)->create();
    $adminUser->roles()->sync(Role::where('name', 'Administrator')->first());

    $this->actingAs($adminUser, config('admin-auth.defaults.guard'))
        ->json(
            'DELETE',
            route('admin/suppliers/destroy', $supplier),
            $supplier->toArray()
        )
        ->assertStatus(302)
        ->assertRedirectToRoute('admin/suppliers/index');
    $this->assertDatabaseMissing(
        'suppliers',
        $supplier->toArray()

    );
} 

原因分析与解决方案
  • 核心问题:未持久化的模型没有有效主键
    你用Supplier::factory()->make()生成的是内存中的模型实例,不会存入数据库,所以这个实例没有自动生成的主键(比如id字段)。Laravel的路由隐式绑定依赖模型的主键值来填充路由参数{supplier},没有主键的话,路由生成时无法提取到所需参数,自然会报“缺少参数”的错误。

  • 正确解决方案:持久化模型到数据库
    把make()替换成create(),这样模型会被写入数据库并生成主键:

    $supplier = Supplier::factory()->create()->setAppends([])->makeHidden(['created_at', 'updated_at']);
    

    另外,原本用make()时,assertDatabaseMissing断言毫无意义——因为模型根本没进数据库,断言永远会通过。改成create()后,这个断言才能真正验证删除操作是否生效。

  • 额外优化:删除请求无需传模型数据
    DELETE请求只需要路由里的供应商ID就能完成删除,不需要把整个模型数组作为请求体传入,所以可以去掉第三个参数:

    $this->actingAs($adminUser, config('admin-auth.defaults.guard'))
        ->json('DELETE', route('admin/suppliers/destroy', $supplier))
        ->assertStatus(302)
        ->assertRedirectToRoute('admin/suppliers/index');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:09:24