在Codeception中将调试输出打印到控制台

Aya*_*e__ 38 php debugging console output codeception

非常厚的问题,但有没有办法在Codeception中将自己的调试消息打印到控制台?我的意思是与断言无关的消息,纯粹用于调试测试本身(例如,你可以var_dump()在任何常规PHP网站中使用变量)

我已经尝试过var_dump(),echoprint但无济于事.使用WebDebug's makeAResponseDump()既不会产生所需的结果,我只是希望能够看到我的变量的内容,而不必像xdebug那样运行调试器.

Bae*_*Bae 50

请参阅调试说明

您可以使用codecept_debug函数在测试中打印任何信息.

我在我的*Cept课程中使用它:

codecept_debug($myVar);
Run Code Online (Sandbox Code Playgroud)

您的调试输出仅在使用--debug运行时可见(-v不显示它,但-vv和-vvv do):

codecept run --debug
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

Validate MyEntity table insert (MyCept) 
Scenario:
* I persist entity "AppBundle\Entity\MyEntity"

  AppBundle\Entity\MyEntity Object
  (
      [Id:AppBundle\Entity\MyEntity:private] => 1
      [Description:AppBundle\Entity\MyEntity:private] => Description
  )

 PASSED 
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。只是希望我能够拥有这个自定义的临时调试输出,而无需看到每次运行时显示的所有“--debug”内容。 (2认同)

sen*_*ett 48

\Codeception\Util\Debug::debug($this->em);die();
Run Code Online (Sandbox Code Playgroud)

并使用--debug标志运行Codeception .


Aya*_*e__ 10

我似乎通过使用辅助类找到了解决问题的方法:

class WebHelper extends \Codeception\Module
{
    public function seeMyVar($var){
        $this->debug($var);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且如此调用类:

$foo = array('one','two');
$I->seeMyVar($foo);
Run Code Online (Sandbox Code Playgroud)

然后我得到我正在寻找的调试输出

I see my var "lambda function"
  Array
  (
      [0] => one
      [1] => two
  )
Run Code Online (Sandbox Code Playgroud)

我会接受这个作为临时解决方案但是我想保持我的断言干净并且不要将var_dumps升级到测试功能,所以如果有人有一个概念上正确的解决方案,请提交


小智 7

或者您可以使用详细程度控制命令,如:

codecept run -vvv
Run Code Online (Sandbox Code Playgroud)

其中每个都v增加了输出的详细程度(默认情况下非常安静).


jer*_*rke 5

ob_flush()输出文本后调用即可

\n

示例代码:

\n
    public function testDebugOutputToCli() {\n        var_dump(new DateTime());\n        ob_flush();\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

代码和输出的屏幕截图:

\n

使用 ob_flush 回显本来会被 PHPUnit 隐藏的内容的屏幕截图

\n

为什么?PHPUnit始终是输出缓冲,因此我们在调试时需要转储缓冲区

\n

我正在努力解决上面的所有答案,特别是因为所选答案 \xe2\x80\x93using codecept_debug()with--debug正如手册所说的 \xe2\x80\x93 导致了大量的调试输出,这使得它无法为我使用。

\n

我像一个书呆子一样阅读 PHPUnit 手册,并偶然发现了这一点,我认为这解释了导致整个 PHPUnit 整个问题的原因,而不仅仅是 Codeception:

\n
\n

PHPUnit 手册,测试输出:\xe2\x80\x9c 有时,您想要断言某个方法的执行会生成预期的输出(例如,通过 echo 或 print)。PHPUnit\\Framework\\TestCase 类使用 PHP\xe2\x80\x99s 输出缓冲功能来提供所需的功能。\xe2\x80\x9d

\n
\n

这完全有道理,并解释了为什么我们看不到输出。PHPUnit 正在保存它,以便我们想检查注释!这就是它在我们的实际测试中应该始终工作的方式,我们当然不希望仅仅因为我们调用了一个使用echo.

\n

但是当我们调试时,我们只想立即看到文本,并且理解了这一切,解决方案就很明确了:只需使用ob_flush()按需打印输出缓冲区的内容即可!

\n

为阅读有趣的手册而欢呼三声!

\n

PS 还发现此提示隐藏在dev.to 上 Julian 的 How to show var_dumps in phpunit or codeception 中

\n

  • 令人难以置信的是,多个问题的数十个答案都没有谈论这一点。感谢您最终提出了一个好的可行解决方案。除了点赞之外,我还能做更多的事情来让更多人看到这个吗? (3认同)