标题已经在PHPStorm中发送了运行单元测试

时间:2015-07-02 04:31:46

标签: php phpunit phpstorm

我尝试使用在PHPStorm中运行phpunit测试的集成方法,并遇到一些问题让它发挥作用。

PHP:5.6.10
PHPUnit:4.5.1
PHPStorm:8.0.3

感谢https://stackoverflow.com/a/30345501/1636594我了解到我必须将我的phpunit版本降级为< 4.6。

查找https://stackoverflow.com/a/25903332/1636594我尝试了@runInSeparateProcess表示法和strerr =" false | true"在我的配置中。通过进程隔离,我看到了与此用户相同的问题(基本上是phpunit --help而不是隔离的每个测试)。使用stderr =" false | true"我得到同样的方式(不能修改标题信息......等等)。

测试运行正常,没有进程隔离或stderr设置为true或false,都可以成功通过测试。 Screenshot of tests passing in terminal, failing in integrated runner

现在我很明显只是在终端上运行我的测试,但我真的希望能够使用覆盖功能,但在标题调用后它对于任何代码行基本没用。

2 个答案:

答案 0 :(得分:1)

我有同样的问题。当我尝试使用内置的PHPStorm工具运行任何代码接收测试(专门针对Yii2)时,我收到消息:

session_set_cookie_params():标头已发送后,无法更改会话cookie参数

我没来很久,但是昨天在与通用铃鼓共舞午夜之后,我发现了以下内容:

PHPStorm(用于Google的jetBrains)使用Codeception Framework插件来放置文件:

C:/Users/dev/AppData/Local/Temp/ide-codeception_before_24.php:405

使用printEvent方法从中通过打印机:: write()登录到控制台:

供应商/ phpunit / phpunit / src / Util / Printer.php:99

如何很好地修复它,我没有找到,所以“这是我们给张伯伦的答案!”:我们在测试/ _bootstrap.php中编写 ob_start()


    <? php
    require_once __DIR__. '/../vendor/yiisoft/yii2/Yii.php';
    require_once __DIR__. '/ .. / vendor / autoload.php';

    ob_start ();

在测试结束时,缓冲区会自动刷新到控制台。我们得到以下信息:

Example of running codeception run tests functional

答案 1 :(得分:0)

这可以通过在调用最终导致错误的代码之前将 PHP 错误报告级别设置为 E_ERROR 来解决:

...
error_reporting(E_ERROR);
expect_not($this->model->login());
...

对于单元测试,可以通过在 error_reporting() 中调用 _before() 来为所有测试函数实现:

protected function _before()
{
    parent::_before();
    error_reporting(E_ERROR);
}

在更高级别,我们可以通过在 error_level 中设置 unit.suite.yml 来替换单元测试的默认代码接收错误报告级别:

class_name: UnitTester
modules:
  enabled:
    - Asserts
    - Yii2:
        part: [orm, email, fixtures]
error_level: "E_ERROR"