【问题标题】:GitLab CI Docker CakePHP 2 testing doesn't workGitLab CI Docker CakePHP 2 测试不起作用
【发布时间】:2017-03-01 05:43:27
【问题描述】:

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

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

我正在使用这个版本,但我仍然收到以下错误:

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

警告错误:include(): 在 [/builds /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。

我将不胜感激!

【问题讨论】:

  • 我有同样的问题,但目前没有解决方案:-(

标签: cakephp docker phpunit gitlab-ci


【解决方案1】:

嗯,问题是 phpunit 从 v4 开始没有自动加载文件(如果我没记错的话)。打包在 phpunit.phar 中的所有文件都通过直接的代码内 require 语句包含(例如,对于 5.3.4 phar,如果您查看文件内部,则此类语句占用文件的第 23 - 517 行)。这个想法是您的测试是通过 CLI 中的 phpunit 命令启动的,因此 phar 文件会做好所有准备并启动 PHPUnit_TextUI_Command::main()。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2020-01-08
    • 2021-05-10
    • 2021-10-04
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多