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错误
- 检查路由位置:Laravel 的
routes/api.php路由默认跳过 CSRF 验证,若你的接口定义在routes/web.php,会触发 CSRF 校验失败导致重定向。确认路由文件归属。 - 校验用户权限:即使通过
actingAs模拟登录,若控制器中存在权限校验逻辑,当前测试用户可能无创建资产权限,导致重定向。查看控制器内权限判断代码。 - 检查请求数据:payload 里的
transmission_多了下划线、avalability_status拼写错误(应为availability_status),这类问题会触发验证失败。如果是 web 路由,验证失败会返回重定向而非 JSON 错误。核对验证规则和字段名是否匹配。 - 确认路由配置:检查
POST /api/v1/assets是否正确指向对应控制器的创建方法。
更新接口405错误
- 请求方法不匹配:405 表示请求方法不被允许,比如你用 POST 请求更新接口,但路由定义的是 PUT/PATCH 方法。核对测试代码的请求方法和路由定义是否一致。
- 路由不存在:若未定义更新接口的对应路由,也会返回405。确认更新接口的路由配置是否正确。
内容的提问来源于stack exchange,提问作者maxwell
相关产品推荐
相关产品推荐

