PHP 测试在本地通过,但在使用 Composer、PSR-4 自动加载的 Travis CI 上失败

PHP tests pass locally but fail on Travis CI using Composer, PSR-4 autoload

谁能帮我理解为什么这些单元测试在通过本地设置时 CI 失败的原因。

存储库位于 https://github.com/jabranr/test-ci

测试在 https://travis-ci.org/jabranr/test-ci

测试在 CI 中失败,出现致命错误:PHP Fatal error: Class 'JRI\JabranCI\Exception\FooBarException' not found in /home/travis/build/jabranr/test-ci/test/exception/FooBarExceptionTest.php on line 11

包使用 PSR-4 自动加载。这里是composer.json and phpunit configuration。提前致谢!

所以我认为这些测试失败是因为目录名称与 PSR-4 自动加载不匹配 区分大小写的方案.

在这种特殊情况下,这与 OSX 的 不区分大小写 性质直接相关。虽然单元测试工作正常并在 OSX 本地机器上通过,但它们在 Travis CI 上一直失败,因为它基于 Linux (Ubuntu) 容器进行测试。

所以基本上从上面的例子来看,当调用JRI\JabranCI\Exception\FooBarException时,目录结构应该是src/JRI/JabranCI/Exception/FooBarException.php

通用示例:

如果存在 class Baz 和命名空间 Foo\Bar,则使用 PSR-4 的有效目录结构是 src/Foo/Bar/Baz.phpsrc/foo/bar/Baz.php 的目录结构在这种情况下是无效的。