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


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和phpunit的配置。提前谢谢!

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

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

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

一般示例:

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