47

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

我已经尝试过var_dump()echoprint无济于事。使用WebDebug'smakeAResponseDump()也不会产生所需的结果,我只想能够看到我的变量的内容,而不必运行像xdebug这样的调试器。

4

9 回答 9

70

请参阅调试它说

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

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

codecept_debug($myVar);

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

codecept run --debug

输出看起来像:

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 
于 2015-05-26T22:40:48.650 回答
54
\Codeception\Util\Debug::debug($this->em);die();

并使用标志运行 Codeception --debug

于 2014-09-09T16:00:39.560 回答
10

I seem to have found a way around the issue by using a helper class:

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

and calling the class as such:

$foo = array('one','two');
$I->seeMyVar($foo);

then I get the debug output I'm looking for

I see my var "lambda function"
  Array
  (
      [0] => one
      [1] => two
  )

I will accept this as a temporary solution however I would like to keep my assertions clean and not clutter them with var_dumps upgraded to test functions, so if anyone has a conceptually correct solution, please submit

于 2014-02-19T07:34:41.753 回答
7

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

codecept run -vvv

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

于 2015-05-22T17:53:18.283 回答
1

默认情况下,Codeception 说有一个错误,但没有详细显示。但是根据这篇博客文章,添加 --debug 会详细显示错误。

codecept run --debug

于 2014-09-08T10:20:04.527 回答
1

根据 OP

我只想能够看到我的变量的内容

如果你有一个像

$var="hello";

你想在控制台中输出它然后简单地做

$I->comment($var);

$I 是AcceptanceTester 类的默认对象名称

于 2021-07-23T04:03:28.787 回答
1

ob_flush()输出文本后调用

示例代码:

    public function testDebugOutputToCli() {
        var_dump(new DateTime());
        ob_flush();
    }

代码和输出截图:

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

为什么?PHPUnit总是输出缓冲,所以我们调试的时候需要dump缓冲

我一直在为上面的所有答案而苦苦挣扎,特别是因为选择的答案——正如手册所说codecept_debug()的那样使用——--debug导致了大量的调试输出,使我无法使用。

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

PHPUnit 手册,测试输出:“有时你想要断言一个方法的执行,例如,生成一个预期的输出(例如,通过 echo 或 print)。PHPUnit\Framework\TestCase 类使用 PHP 的输出缓冲特性来提供必要的功能。”</p>

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

但是我们在调试的时候,只想马上看到文字,明白了这一切,解决办法就很清楚了:ob_flush()按需打印输出缓冲区的内容!

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

PS 还发现这个技巧隐藏在How to show var_dumps in phpunit 或 codeception by Julian on dev.to

于 2021-07-10T21:04:16.267 回答
1

简短,漂亮和简单的方法

绝对codecept_debug--debug选项是正确的方法之一。

但是--debug显示了很多冗长,我们可能不需要所有时间来查看单个变量的值。有时我们可能需要在 CLI 上滚动很多才能到达我们的变量

但是,还有另一种简短、漂亮且简单的方法

用 true 或任何随机值断言变量,assertSame用于显示/var_dump 变量

假设我需要看看里面有什么$mango,我确定它不是真的或“随机的”

$I->assertTrue($mango)
$I->assertSame($mango, 'something random') // I am pretty sure $mango does not equals to 'something random'

上面的语句会抛出错误打印出来$mango,最好的部分是它会打印在底部,所以不需要滚动也不需要冗长。同样这种方式也不需要--debug在 CLI 命令中添加

局限性:

PHP 中的 10 种数据类型

Four scalar types:


bool
int
float (floating-point number, aka double)
string


Four compound types:

array
object
callable
iterable


And finally two special types:

resource
NULL

以上我的方式只适用于6:

Four scalar types:

bool
int
float (floating-point number, aka double)
string


One compound types:

array


And finally one special types:

NULL

的值objectresource将不会打印得很好。

于 2021-01-09T20:55:17.947 回答
-1

简短版本将是 codecept run tests/acceptance/SomeCest.php -d
-d 将向您显示步骤和调试

于 2017-04-17T21:27:11.480 回答