Laravel 测试请求集正文

Posted

技术标签:

【中文标题】Laravel 测试请求集正文【英文标题】:Laravel tests request set body 【发布时间】:2022-01-02 00:07:01 【问题描述】:

我有一个 API 使用 $request->getContent(); 来获取正文(即 JSON),我想编写一些功能测试来测试这个端点,但我找不到在 Laravel 功能测试中设置正文的方法:

public function testSuccessfullyProcessed()

    $json = '<json>';

    $response = $this->get('/api/process');

    $response->assertStatus(200);

根据Visual Studio Code,没有像$this-&gt;setBody$this-&gt;setContent 这样的东西。我搜索了$this的方法,找不到方法吗?

我花了一些时间在谷歌上搜索各种东西,但我只找到有关如何获取尸体的信息。

【问题讨论】:

【参考方案1】:

我假设您想设置请求的正文;如果是这样,您可以通过以下方式在 post 请求的第二个参数中传递数据。

public function testSuccessfullyProcessed()

    $testData = [
        'my_data_1' => 'Test Data'
    ];

    $response = $this->post('/api/process', $testData);

    $response->assertStatus(200);

如果您打算手动设置请求的响应,我认为您可能搞混了,因为这没有任何意义。

【讨论】:

问题是我的数据不是关联数组,而是简单的 JSON 编码字符串。 @PetarVasilev 然后decode它首先 但我需要在端点接受它。 @布莱恩汤普森 @PetarVasilev 听起来您需要使用所有相关详细信息更新您的问题。如果您需要 JSON 在控制器中保留编码字符串,那么您可以将其分配给请求$this-&gt;post('..', ['data' =&gt; $json]) 中的属性,但这似乎是一个奇怪的要求。请edit您的问题准确包含您想要的结果。 @BrianThompson 我想在端点 $request-&gt;getContent() 返回 JSON,然后继续对其进行解码并使用它。

以上是关于Laravel 测试请求集正文的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 PHPUnit JSON Api 请求正文未设置

Laravel 获取正文请求并避免查询字符串参数

在 laravel 测试中进行多个帖子调用时忽略帖子正文

如何使用 Laravel 在响应正文中发送 auth cookie?

Laravel 8/Passport/GuzzleHttp APO 返回 200 OK 但没有正文响应

Laravel 测试 - 429 请求过多