GitLab CI Docker CakePHP 2测试不起作用

时间:2016-10-19 14:11:56

标签: cakephp docker phpunit gitlab-ci

我在Docker容器中通过PHPUnit测试CakePHP2应用程序时遇到了一些问题。

CakePHP2 testing guide指出,与CakePHP2兼容的最后一个PHPUnit版本是3.7.38。

我正在使用此版本但仍然出现以下错误:

  

警告错误:include(PHPUnit / Autoload.php):无法打开流:[/builds/application_folder/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php,第162行]中没有此类文件或目录

     

警告错误:include():在[/ builds中打开'PHPUnit / Autoload.php'以包含(include_path ='/ builds / zb2 / kswf / lib:。:/ usr / local / lib / php')失败/application_folder/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php,行162]

有一个issue与此错误相关,但它是通过从PHPUnit 4降级到PHPUnit 3来解决的。

这是我用于GitLab Runner

的图像的Dockerfile
FROM php:5
RUN apt-get update -y
RUN apt-get install -y wget
RUN sh -c 'wget -c https://phar.phpunit.de/phpunit-3.7.38.phar -O phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /usr/local/bin/phpunit'

在.gitlab-ci.yml的before_script部分中,我打印PHPUnit版本以验证是否安装了正确的版本并打印3.7.38。

我很感激你的帮助!

1 个答案:

答案 0 :(得分:1)

嗯,问题是phpunit自身没有自动加载文件,从v4开始(如果我没记错的话)。所有包含在phpunit.phar中的文件都包含在直接的代码内需求语句中(例如,对于5.3.4 phar,如果您查看文件内部,这些语句占据文件的第23 - 517行)。想法是你的测试是通过CLI中的phpunit命令启动的,所以phar文件做了所有的准备工作并启动PHPUnit_TextUI_Command :: main()。

如果您需要从PHP代码启动测试(看起来就是这种情况),您需要自己处理所有准备工作。如果仅提及类加载,您可以实现映射器并spl_autoload_register,或者为类创建转储并创建一些文件,其中包含来自phpunit的所有文件(如phar文件中所示)。另一种选择(从未尝试但我认为可能)可能是使用Composer为phpunit创建转储和自动加载器,它确实具有这样的功能。

我已经为Komodo IDE实现了这样一个启动器,我选择了第一个选项(我自己的转储器,映射器和自动加载器),只是不立即包含所有文件,只加载实际需要的文件,也能够并运行不同版本的phpunit。

嗯,这不是一个真正的答案,因为你不能只是复制粘贴并让工作变得有效,我试图将所有内容都作为评论,但不能设置得足够短。