TravisCI PHPUnit致命错误 - 调用未定义的方法PHPUnit_Util_Configuration :: getTestdoxGroupConfiguration()

twi*_*ity 5 php phpunit travis-ci

PHPUnit_Util_Configuration::getTestdoxGroupConfiguration()即使PHPUnit在本地运行没有问题,我的TravisCI构建也因为致命的错误引用而失败.我已经验证了TravisCI上的Composer正在安装与我在本地安装的相同版本的PHPUnit.

我注意到最近的一个补丁专门引用了testdox组配置,但我无法弄清楚为什么这个改变可能会破坏TravisCI中的PHPUnit而不是我的本地版本.

这是TravisCI的作曲家:

- Installing phpunit/phpunit (5.7.6) Downloading: 100%
Run Code Online (Sandbox Code Playgroud)

这是来自TravisCI的致命错误和堆栈跟踪:

PHP Fatal error:  Call to undefined method PHPUnit_Util_Configuration::getTestdoxGroupConfiguration() in /home/travis/build/twistofreality/dilmun/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 1042
PHP Stack trace:
PHP   1. {main}() /home/travis/.phpenv/versions/5.6.5/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /home/travis/.phpenv/versions/5.6.5/bin/phpunit:722
PHP   3. PHPUnit_TextUI_Command->run() phar:///home/travis/.phpenv/versions/5.6.5/bin/phpunit/phpunit/TextUI/Command.php:104
PHP   4. PHPUnit_TextUI_TestRunner->doRun() phar:///home/travis/.phpenv/versions/5.6.5/bin/phpunit/phpunit/TextUI/Command.php:152
PHP   5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/travis/build/twistofreality/dilmun/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:163
Run Code Online (Sandbox Code Playgroud)

twi*_*ity 9

问题是PHPUnit的全局TravisCI版本与Composer正在安装的版本之间的版本不匹配.注意堆栈跟踪的最后两行:

PHP   4. PHPUnit_TextUI_TestRunner->doRun() phar:///home/travis/.phpenv/versions/5.6.5/bin/phpunit/phpunit/TextUI/Command.php:152
PHP   5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/travis/build/twistofreality/dilmun/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:163
Run Code Online (Sandbox Code Playgroud)

最后一行引用vendor/phpunit(在本例中,版本5.7.6,根据Composer输出),而倒数第二行引用TravisCI的全局bin/phpunit(版本5.6.5).在尝试调用全局版本中的内容时,最近版本中的补丁很可能会破坏某些内容.

更新.travis.yml以使用vendor/bin/phpunit(加上任何标志)来使用Composer安装的版本可以解决问题.具体来说,将此行添加到.travis.yml(或者,就像在我的情况下,修改现有的phpunit行),可以解决这个问题:

script:
    - vendor/bin/phpunit [phpunit flags here]
Run Code Online (Sandbox Code Playgroud)