Jab*_*que 2 php phpunit travis-ci psr-4
任何人都可以帮助我理解为什么这些单元测试在通过本地设置时在 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 autoload casesensitive scheme不匹配。
在这种特殊情况下,这与OSX不区分大小写的性质直接相关。虽然单元测试运行良好并在 OSX 本地机器上通过,但它们在 Travis CI 上一直失败,因为它基于 Linux (Ubuntu) 容器进行测试。
所以基本上从上面的例子来看,调用时JRI\JabranCI\Exception\FooBarException,目录结构应该是src/JRI/JabranCI/Exception/FooBarException.php
通用示例:
如果有一个Baz带有命名空间的类,Foo\Bar那么使用 PSR-4 的有效目录结构是src/Foo/Bar/Baz.php. src/foo/bar/Baz.php在这种情况下,的目录结构无效。