如何从PHP Spec测试方法中快速编写调试输出

时间:2019-02-05 09:00:22

标签: phpspec

我继承了一些phpspec测试。

该测试正在测试名为“ getFatalErrors”的方法的值,并通过以下方式报告失败:

 expected [array:1], but got [array:1].

我想查看数组的实际内容。

我试图通过添加如下代码行来破解phpspec测试类:

<?php

namespace spec;

use MyClass;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class MyClassSpec extends ObjectBehavior
{



    public function it_returns_a_path_problem($args,\XMLFileWrapperTest $testWrapper)
    {
        echo "foo";

        ...

        var_dump(print_r($this->getFatalErrors()->getWrappedObject(), true));
        ...
        fwrite(STDOUT, "foo");
        print_r($this->getFatalErrors()->getWrappedObject(), true)



        $this->display("foo");
    }
}

-

但是我永远无法在CLI输出中显示任何输出。

如何使一些任意文本出现在测试输出中,以便当我对PHPSpec更加熟悉时能“看到”正在发生的事情?

4 个答案:

答案 0 :(得分:0)

您是否尝试过跟踪错误日志并在函数中添加类似内容 error_log( print_r( $this->getFatalErrors()->getWrappedObject(), 1 ) );error_log( print_r( $this->getFatalErrors(), 1 ) );? 通常,它可以正常工作,因为输出已写入服务器错误日志中,并且您可以使用终端或控制台在该文件上尾部并实时查看结果。

答案 1 :(得分:0)

只需使用-v标志运行phpspec,它将更加冗长。

答案 2 :(得分:0)

根据phpspec documentation on Matchers > Inline Matcher,有可能...

  

打印更详细的错误消息

为此,您可以抛出

  

FailureException

因此,这意味着可以从您的PHPSpec示例方法中抛出FailureException来输出自定义消息。

我尝试了这个,它让我在测试输出中写了“ foo message”这个短语:

<?php

namespace spec;


use PhpSpec\ObjectBehavior;
[...]
use PhpSpec\Exception\Example\FailureException;

class MyClassSpec extends ObjectBehavior
{


    public function it_tests_something()
    {

        [...]

        throw new FailureException("foo message");
    }


}

答案 3 :(得分:0)

尝试different formatter

在phpspec.yml中使用该行选择了格式化程序pretty

formatter.name: pretty

或在执行带有格式标志的测试运行器时

vendor/bin/phpspec run --format=pretty

然后echo输出在终端中可见。