使用PHPUnit发送POST请求

使用PHPUnit发送POST请求,php,symfony,post,tdd,phpunit,Php,Symfony,Post,Tdd,Phpunit,我有一个symfony网站,我正在尝试做一些单元测试。我有这样的测试,我试图提交一些东西: <?php namespace Acme\AcmeBundle\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class HomeControllerTest extends WebTestCase { public function testrandomeThings() {

我有一个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());
        }
var\u dump
实际上返回了一个空数组


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

$\u POST
是一个由PHP填充的变量,只有在通过http直接调用时,才从这个全局变量创建symfony请求。symfony爬虫程序不会发出真正的请求,它会根据
$client->request
中提供的参数创建一个请求并执行它。您需要通过对象访问这些内容。切勿直接使用
$\u POST
$\u 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->request->all()
获取数组中的所有POST参数。要仅获取特定参数,可以使用
$request->request->get('my_param')
。如果您需要访问获取参数,可以使用
$request->query->GET('my_param')
,但最好在路由模式中设置查询参数。

我想您正在尝试这样做:

$client = static::createClient();
    $client->request($method, $url, [], [], [], json_encode($content));
    $this->assertEquals(
        200,
        $client->getResponse()
            ->getStatusCode()
    );
您将数据(内容)作为params数组放入,但希望将其作为原始正文内容放入,原始正文内容是一个JSON编码的字符串

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