非常厚的问题,但是有没有办法在 Codeception 中将您自己的调试消息打印到控制台?我的意思是与断言无关的消息,纯粹用于调试测试本身(例如,就像您var_dump()
在任何常规 PHP 网站中使用变量一样)
我已经尝试过var_dump()
,echo
但print
无济于事。使用WebDebug
'smakeAResponseDump()
也不会产生所需的结果,我只想能够看到我的变量的内容,而不必运行像xdebug这样的调试器。
非常厚的问题,但是有没有办法在 Codeception 中将您自己的调试消息打印到控制台?我的意思是与断言无关的消息,纯粹用于调试测试本身(例如,就像您var_dump()
在任何常规 PHP 网站中使用变量一样)
我已经尝试过var_dump()
,echo
但print
无济于事。使用WebDebug
'smakeAResponseDump()
也不会产生所需的结果,我只想能够看到我的变量的内容,而不必运行像xdebug这样的调试器。
请参阅调试它说
您可以使用 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
\Codeception\Util\Debug::debug($this->em);die();
并使用标志运行 Codeception --debug
。
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
或者您可以使用详细程度控制命令,例如:
codecept run -vvv
其中每个都会v
增加输出的详细程度(默认情况下非常安静)。
默认情况下,Codeception 说有一个错误,但没有详细显示。但是根据这篇博客文章,添加 --debug 会详细显示错误。
codecept run --debug
根据 OP
我只想能够看到我的变量的内容
如果你有一个像
$var="hello";
你想在控制台中输出它然后简单地做
$I->comment($var);
ob_flush()
输出文本后调用示例代码:
public function testDebugOutputToCli() {
var_dump(new DateTime());
ob_flush();
}
代码和输出截图:
我一直在为上面的所有答案而苦苦挣扎,特别是因为选择的答案——正如手册所说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
绝对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
的值object
,resource
将不会打印得很好。
简短版本将是
codecept run tests/acceptance/SomeCest.php -d
-d 将向您显示步骤和调试