【问题标题】:How to debug controller while testing, using: Guzzle, Symfony, PhpUnit, PhpStorm, REST?如何在测试时调试控制器,使用:Guzzle、Symfony、PhpUnit、PhpStorm、REST?
【发布时间】:2018-01-30 23:39:53
【问题描述】:

在 PhpStorm 中调试测试类(PHPUnit_Framework_TestCase 的子类)时,它会在此类中设置的断点处停止,但不会在请求指向的控制器 (Symfony) 中停止。

//test class - here debugger stops
class FooControllerTest extends \PHPUnit_Framework_TestCase
{
    public function testPOST()
    {
        $response = $this->client->post('/api/foo', [
           'body' => json_encode($data)
        ]);

.

//controller - here debugger not stopping
/**
 * @Route("/api/foo")
 * @Method("POST")
 */
public function newAction(Request $request)
{
    //...
    return new Response($json, 201, array(
        'Content-Type' => 'application/json'
    ));

请求肯定会进入这个控制器,因为我可以在那里更改 http 代码,并且此更改在 client->post( 行之后的测试类中是可读的

如何在测试时调试控制器?

【问题讨论】:

  • 很可能它是作为附加/单独的请求完成的,并且没有传递“调试我”标志。 IDE 设置也可以处理最多 1 个同时调试会话(默认设置)。对于第一点——也许配置 xdebug 来调试任何传入的请求而没有任何标志 (xdebug.remote_autostart=1)。显然,在其他情况下并不理想。或者向此类请求添加 xdebug cookie 或 GET 参数。也可以尝试将xdebug_break(); 放在实际代码中——应该可以。
  • 第二点——在 IDE 设置中增加该数字(提示:使用设置/首选项屏幕中的搜索框,将“xdebug”作为关键字)
  • @LazyOne 谢谢,添加了 GET 参数及其工作。在同时会话数量增加后使用xdebug.remote_autostart=1 和xdebug_break(); 的解决方案不起作用。我将其添加为答案,如果您关心分数,您可以将我的答案复制到您的(然后我将删除我的)

标签: symfony debugging phpunit phpstorm guzzle


【解决方案1】:

如果您正在使用 Symfony 和 PHPUnit 测试您的 api,我可以给您一些建议,但事实是我并不真正完全理解您所说的“调试控制器”是什么意思。

首先:当测试失败时,将侦听器附加到 PHPUnit,它将打印 PSR-7 HTTP 请求和响应正文。如果您使用的是 Guzzle 6,则可以轻松实现。这里有一些文档可以帮助您:

第二:在 config_test.yml 中启用分析器。这样,分析器将为您的测试收集信息,并使您的调试更容易。由于您正在打印 Psr7 请求和响应字符串,因此标头将包含指向该请求的分析器的链接。

使用 SQLite 数据库进行测试设置,我发现它非常有帮助。现在,如果你真的想跳到一个新的水平,你应该使用 Behat。 :)

【讨论】:

  • 谢谢马蒂亚斯,我会试试的。调试是指使用 IDE 进行。
  • 哦,那我的回答完全是废话。哈哈。
【解决方案2】:

在 PhpStrom 中你需要准备Simultaneous debugging sessions。因此,在您的情况下,在 Test 类中将 GET 参数添加到 URL:

class FooControllerTest extends \PHPUnit_Framework_TestCase
{
    public function testPOST()
    {
        //...
        $response = $this->client->post('/api/foo'. '?' . $this->getDebugQuery(), [
            'body' => json_encode($data)
        ]);
        //...

    }

    private function getDebugQuery()
    {
        $debuggingQuerystring = '';
        if (isset($_GET['XDEBUG_SESSION_START'])) { // xdebug
            $debuggingQuerystring = 'XDEBUG_SESSION_START=' . $_GET['XDEBUG_SESSION_START'];
        }
        if (isset($_COOKIE['XDEBUG_SESSION'])) { // xdebug (cookie)
            $debuggingQuerystring = 'XDEBUG_SESSION_START=PHPSTORM';
        }
        if (isset($_GET['start_debug'])) { // zend debugger
            $debuggingQuerystring = 'start_debug=' . $_GET['start_debug'];
        }
        if (empty($debuggingQuerystring)) {
            $debuggingQuerystring = 'XDEBUG_SESSION_START=PHPSTORM';
        }

        return $debuggingQuerystring;
    }

并切换“侦听调试器连接”按钮。

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 2018-09-20
    • 2016-01-14
    • 2012-07-16
    • 2015-08-26
    • 2017-12-20
    • 1970-01-01
    • 2021-07-21
    • 2018-09-18
    相关资源
    最近更新 更多