Я не вижу никаких ошибок, когда я запускаю или проверяю свой код локально. мой 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"}
},
Мне потребовалось некоторое время, чтобы заметить это даже на примере кода, который вы дали, но похоже, что часть пространства имен — неправильный случай (API
против Api
)?
Вопреки распространенному мнению, машины OS X по умолчанию отформатированы без учета регистра, что, к сожалению, делает их более похожими на машины Windows в этом отношении.
Других решений пока нет …