找不到PHP类错误只发生在CircleCI上

时间:2015-10-06 21:45:46

标签: php unit-testing continuous-integration travis-ci circleci

我在本地运行或测试代码时没有看到任何错误。我的phpunit测试套件通过了:

Time: 11.69 seconds, Memory: 43.50Mb

OK, but incomplete, skipped, or risky tests!
Tests: 149, Assertions: 281, Incomplete: 13.

但是当我推送完全相同的代码并且CircleCI运行完全相同的测试命令时,它会因致命错误而失败:

.PHP Fatal error: Class 'App\Domain\API\Request\Soap\Json\AbstractJson' not found in /home/ubuntu/TransitScreen/src/Domain/Api/Request/Soap/Json/NJTransit.php on line 10 php ./vendor/bin/phpunit --no-coverage --testsuite=unit returned exit code 255

这是我的circle.yml:

test:
  override:
    - php ./vendor/bin/phpunit --no-coverage --testsuite=unit

machine:
  php:
    version: 5.6.5
  environment:
    APP_ENV: circleci

它引用的文件以:

开头
<?php

namespace App\Domain\API\Request\Soap\Json;

use App\Domain\Api\Request\InputApiDataRequest;
use App\Domain\Api\Request\Soap\AsyncSoapClient;
use Assert\Assertion;

class NJTransit extends AbstractJson
{

起初我认为CircleCi可能正在运行旧版本的PHP而没有名称空间或其他东西,但即使我将其设置为使用PHP v5.6.5时也会发生同样的错误。我甚至尝试在测试序列中添加数据库转储。

对我来说,在发生错误之前能够运行几十个测试对我来说更奇怪。因此,我非常确定它不会在CircleCI上出现严重错误配置。

关于为什么相同的代码在两种环境中表现如此不同的任何建议?

更新1:我发现这个问题听起来非常相似,但到目前为止,覆盖了作曲家命令还没有解决问题。 Laravel - CircleCI - Fails on phpunit

更新2:我发现this question谈论自动删除无法正常工作...它提出了一个新理论......也许存在涉及OSX之间区分大小写差异的问题(我的本地环境)和Ubuntu(CircleCI)。以下是我的composer.json文件的相关部分:

"autoload": {
    "psr-4": {
        "App\\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\\Test\\": "tests",
        "Cake\\Test\\": "./vendor/cakephp/cakephp/tests",
        "TestApp\\": "tests/TestApp/src",
        "TestApp\\Test\\": "tests/TestApp/tests"
    }
},

1 个答案:

答案 0 :(得分:2)

即使使用您提供的代码示例,我也要花些时间来发现它,但看起来命名空间的一部分是错误的情况(API vs Api)?

与流行的看法相反,OS X机器默认情况下不区分大小写,不幸的是它们在这方面更像是Windows机器。