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.php
。 src/foo/bar/Baz.php
的目录结构在这种情况下是无效的。
谁能帮我理解为什么这些单元测试在通过本地设置时 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.php
。 src/foo/bar/Baz.php
的目录结构在这种情况下是无效的。