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

Laravel功能测试中如何设置可被$request->getContent()读取的请求体

解决方案

你当前测试代码的第一个问题是使用了get方法发起请求,HTTP规范中GET请求通常不会携带请求体,你的接口如果是接收JSON数据,大概率是POST/PUT等请求方法,先调整请求方法。
Laravel功能测试不需要单独调用setBody/setContent方法,已经封装了直接传递请求体的能力,两种常用方案如下:

方案1:使用JSON请求方法(推荐)

Laravel提供的postJson/putJson/json方法会自动将数组参数序列化为JSON请求体,同时自动设置Content-Type: application/json请求头,后端通过$request->getContent()可以直接获取到完整的JSON字符串,示例代码:

public function testSuccessfullyProcessed()
{
    // 构造要提交的业务数据,会自动转为JSON格式
    $data = [
        'field1' => 'test value',
        'field2' => 123
    ];

    // 对应POST请求接口,若为PUT请求则替换为putJson方法即可
    $response = $this->postJson('/api/process', $data);

    $response->assertStatus(200);
}

方案2:直接传递原始JSON字符串

如果你已经提前拼接好了原始JSON字符串,不需要Laravel帮你做数组转JSON的处理,可以使用底层的call方法,直接通过content参数传入请求体:

public function testSuccessfullyProcessed()
{
    // 你的原始JSON字符串
    $json = '{"field1":"test value","field2":123}';

    $response = $this->call(
        method: 'POST',
        uri: '/api/process',
        content: $json
    );

    $response->assertStatus(200);
}

注意:如果你的接口确实需要用GET请求携带请求体(不符合HTTP标准规范,不推荐),只需要将上述代码中的method参数改为GET即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:10