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

Laravel控制器功能测试问题:创建与更新接口状态码不符

Laravel 接口测试状态码错误排查

问题

  • 创建接口测试失败:Expected response status code [201] but received 302.Failed asserting that 201 is identical to 302
  • 更新接口测试失败:Expected response status code [201] but received 405.Failed asserting that 201 is identical to 405

创建接口测试代码

public function testCreateAssetSuccessfully(): void
{
    $user = $this->createUser();

    $file = UploadedFile::fake()
        ->create('photo.jpeg', 200, 'image/jpeg')
        ->size(1000);

    $payload = [
        'name' => 'Audi',
        'description' => 'world class',
        'price' => '4000',
        'model' => 'Bent104',
        'brand' => fake()->name(),
        'year' => 2000,
        'gas_type' =>'fuel',
        'transmission_' =>'manual',
        'images' => [$file, $file],
        'city' => 'Berlin',
        'state_id' => '1',
        'country_id' => '115',
        'condition' => 'new',
        'avalability_status' => 'pending',
    ];


    $response = $this->actingAs($user)
        ->post('/api/v1/assets', $payload);

    $response->assertStatus(201)
        ->assertJsonPath('message', 'Successfully Created Assets')
        ->assertJsonPath('success', true);
}

排查方案

创建接口302错误

  1. 检查路由位置:Laravel 的 routes/api.php 路由默认跳过 CSRF 验证,若你的接口定义在 routes/web.php,会触发 CSRF 校验失败导致重定向。确认路由文件归属。
  2. 校验用户权限:即使通过 actingAs 模拟登录,若控制器中存在权限校验逻辑,当前测试用户可能无创建资产权限,导致重定向。查看控制器内权限判断代码。
  3. 检查请求数据:payload 里的 transmission_ 多了下划线、avalability_status 拼写错误(应为 availability_status),这类问题会触发验证失败。如果是 web 路由,验证失败会返回重定向而非 JSON 错误。核对验证规则和字段名是否匹配。
  4. 确认路由配置:检查 POST /api/v1/assets 是否正确指向对应控制器的创建方法。

更新接口405错误

  1. 请求方法不匹配:405 表示请求方法不被允许,比如你用 POST 请求更新接口,但路由定义的是 PUT/PATCH 方法。核对测试代码的请求方法和路由定义是否一致。
  2. 路由不存在:若未定义更新接口的对应路由,也会返回405。确认更新接口的路由配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:22