我尝试使用在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,都可以成功通过测试。
现在我很明显只是在终端上运行我的测试,但我真的希望能够使用覆盖功能,但在标题调用后它对于任何代码行基本没用。
答案 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 ();
在测试结束时,缓冲区会自动刷新到控制台。我们得到以下信息:
答案 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"