当尝试运行一个简单的单元测试时,如下
// tests
public function testMe()
{
$this->assertEquals(1+1, 2);
}
我得到以下错误:
PHP Notice: Undefined variable: output in phar://C:/bin/codecept.phar/src/Codeception/Lib/Parser.php on line 129
PHP Stack trace:
PHP 1. {main}() C:'bin'codecept.phar:0
PHP 2. require_once() C:'bin'codecept.phar:7
PHP 3. Codeception'Application->run() phar://C:/bin/codecept.phar/codecept:36
PHP 4. Symfony'Component'Console'Application->run() phar://C:/bin/codecept.phar/src/Codeception/Application.php:103
PHP 5. Symfony'Component'Console'Application->doRun() phar://C:/bin/codecept.phar/vendor/symfony/console/Application.php:117
PHP 6. Symfony'Component'Console'Application->doRunCommand() phar://C:/bin/codecept.phar/vendor/symfony/console/Application.php:186
PHP 7. Symfony'Component'Console'Command'Command->run() phar://C:/bin/codecept.phar/vendor/symfony/console/Application.php:815
PHP 8. Codeception'Command'Run->execute() phar://C:/bin/codecept.phar/vendor/symfony/console/Command/Command.php:256
PHP 9. Codeception'Command'Run->runSuites() phar://C:/bin/codecept.phar/src/Codeception/Command/Run.php:256
PHP 10. Codeception'Codecept->run() phar://C:/bin/codecept.phar/src/Codeception/Command/Run.php:329
Parser.php
中有问题的行129如下:
public static function validate($file)
{
$config = Configuration::config();
if (empty($config['settings']['lint'])) { // lint disabled in config
return;
}
exec("php -l ".escapeshellarg($file)." 2>&1", $output, $code);
if ($code !== 0) {
throw new TestParseException($file, implode("'n", $output));
}
}
线路129为exec("php -l ".escapeshellarg($file)." 2>&1", $output, $code);
我试过在谷歌上搜索,但找不到其他有这个问题的人。这是在一个完全"空"的php项目中,只有这个单元测试。我用composer安装了Codeception。
我创建了如下测试:
codecept generate:test unit Example
填写上述内容和
codecept run unit
Codeception版本:2.2.2
Php版本:5.6.21
好的,我找到了更多信息,即这里:
https://github.com/Codeception/Codeception/issues/3324
这似乎是版本"的一个非常新的问题;2.2.*";
可能的解决方案有:
禁用过梁
插入
settings:
lint: false
进入codeception.yaml
文件。
降级
由于验证是在2.2版中引入的,因此降级到最新版本(2.1.11)也应该根据开发人员的说法来解决这个问题。