使用 PHPUnit 发送 POST 请求

Posted

技术标签:

【中文标题】使用 PHPUnit 发送 POST 请求【英文标题】:Sending a POST request with PHPUnit 【发布时间】:2013-09-24 21:42:27 【问题描述】:

我有一个 symfony 网站,我正在尝试做一些单元测试。我有这种测试,我尝试提交一些东西:

<?php

namespace Acme\AcmeBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class HomeControllerTest extends WebTestCase 

    public function testrandomeThings() 

        $client = static::createClient();
        $crawler = $client->request(
            'POST',
            '/',
            array(
                "shopNumber"        => 0099,
                "cardNumber"        => 231,
                "cardPIN"           => "adasd"),
            array(),
            array());
        

但我不认为控制器正在接收我发送的数据:

class HomeController extends Controller

    public function indexAction()
    

        var_dump($_POST);
        die;
        return $this->render('AcmeBundle:Home:index.html.twig');
    


var_dump 实际上返回了一个空数组。

通过我的 POST 请求发送信息时缺少什么?

【问题讨论】:

【参考方案1】:

$_POST 是一个由 PHP 填充的变量,如果直接通过 http 调用,symfony 请求只会从这个全局变量创建。 symfony 爬虫不会发出真正的请求,它会根据$client-&gt;request 中提供的参数创建请求并执行它。你需要通过Request 对象来访问这些东西。切勿直接使用$_POST$_GET等。

use Symfony\Component\HttpFoundation\Request;

class HomeController extends CoralBaseController

    public function indexAction(Request $request)
    

        var_dump($request->request->all());
        die;
        return $this->render('CoralWalletBundle:Home:index.html.twig');
    


使用$request-&gt;request-&gt;all() 获取数组中的所有 POST 参数。要仅获取特定参数,您可以使用$request-&gt;request-&gt;get('my_param')。如果您需要访问 GET 参数,您可以使用 $request-&gt;query-&gt;get('my_param'),但最好在路由模式中设置查询参数。

【讨论】:

【参考方案2】:

我认为您正在尝试这样做:

$client = static::createClient();
    $client->request($method, $url, [], [], [], json_encode($content));
    $this->assertEquals(
        200,
        $client->getResponse()
            ->getStatusCode()
    );

您将数据(内容)作为 params 数组放入,但您希望将其作为 JSON 编码字符串的原始正文内容放入。

【讨论】:

以上是关于使用 PHPUnit 发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

不推荐使用 composer require-dev 安装 phpunit?

接口自动化测试系列之PHPUnit-POST请求接口测试方法

接口自动化测试系列之PHPUnit-POST请求接口测试方法

如何通过请求phpunit发送对象

phpstorm laravel单元测试 配置

WebTestCase Phpunit发送原始数据不起作用