【问题标题】:Sending a POST request with PHPUnit使用 PHPUnit 发送 POST 请求
【发布时间】: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 请求发送信息时缺少什么?

【问题讨论】:

    标签: php symfony post tdd phpunit


    【解决方案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 编码字符串的原始正文内容放入。

      【讨论】:

        猜你喜欢
        • 2013-10-06
        • 2015-02-28
        • 2017-02-13
        • 2021-11-30
        • 2017-05-03
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多