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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebTestCase Phpunit发送原始数据不起作用相关的知识,希望对你有一定的参考价值。

我尝试在phpUnit中的WebTestCase中发送原始数据,但它不起作用:

$jsonEvent = '{
      "type": "invoice.payment_succeeded",
}';
$this->client->request(
    'POST',
    '/api/v1/stripe/webhook',
    [],
    [],
    ['CONTENT_TYPE' => 'application/json'],
    $jsonEvent
);

我尝试获取这样的数据:

$input = file_get_contents("php://input");
var_dump($input);

$input是空的

不确定但是也许不可能在webtestcase中获得类似的内容输入?

提前致谢。

答案

我假设您正在使用Symfony的WebTestCase。如果是这种情况,那么首先,从json中删除无效的逗号:

$jsonEvent = '{
  "type": "invoice.payment_succeeded"
}';

其次,我假设你是这样创建客户端的:

$this->client = static::createClient();

如果是这种情况,那么问题是请求方法没有执行http请求,但它正在查找控制器和操作(内部使用“Symfony Component HttpKernel Controller ControllerResolver”)并调用它传递参数,在请求方法中为相应的symfony对象设置的内容和标头。

这就是你不能使用的原因:

$input = file_get_contents("php://input");

因为你真的在运行相同的脚本。

要在您的操作中获取帖子正文,一种方法是:

public function myAction(Request $request)
{
    $input = $request->getContent();

参考和例子

  1. Symfony working with client
  2. Symfony client error

以上是关于WebTestCase Phpunit发送原始数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 phpunit 中引用外部数据提供者?

防止phpunit启动所有功能

Symfony 3 功能测试错误(KERNEL_DIR 或 WebTestCase)

Symfony 2 + Doctrine 2 + PHPUnit 3.5:闭包异常的序列化

如何用Phpunit代理到原始方法并同时禁用构造函数?

无法发送会话 cookie - 标头已发送 PHPUnit / Laravel