модульное тестирование — PHP класс не найден ТОЛЬКО ошибка происходит на 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

Вот мой круг.

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: Я нашел этот вопрос, который звучит очень похоже, но пока что переопределение команды composer не решено проблемой.
Laravel — CircleCI — не работает на phpunit

ОБНОВЛЕНИЕ 2: я нашел этот вопрос который говорит о том, что автозагрузка не работает … Он предлагает новую теорию … возможно, есть проблема, связанная с различиями чувствительности к регистру между 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"}
},

6

Решение

Мне потребовалось некоторое время, чтобы заметить это даже на примере кода, который вы дали, но похоже, что часть пространства имен — неправильный случай (API против Api)?

Вопреки распространенному мнению, машины OS X по умолчанию отформатированы без учета регистра, что, к сожалению, делает их более похожими на машины Windows в этом отношении.

2

Другие решения

Других решений пока нет …