6

Non vedo errori quando eseguo o collaudo il mio codice localmente. Il mio phpunit suite di test passa:Errore di classe PHP non trovato SOLO accade su CircleCI

Time: 11.69 seconds, Memory: 43.50Mb 

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

Ma quando spingo lo stesso codice esatto e CircleCI corre lo stesso comando esatto di prova, non riesce con un errore fatale:

.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 

Ecco la mia circle.yml:

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

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

Il file è riferimento inizia con:

<?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 
{ 

All'inizio pensavo che CircleCi stesse eseguendo una vecchia versione di PHP senza spazi dei nomi o qualcosa del genere ma anche quando ho impostato su PHP v5.6.5 lo stesso errore si verificava. Ho anche provato ad aggiungere un dump del database nella sequenza di test.

È ancora più strano per me che sia in grado di eseguire diverse dozzine di test prima che si verifichi l'errore. Quindi sono abbastanza sicuro che non sia qualcosa di grossolanamente errato su CircleCI.

Qualche suggerimento sul perché lo stesso codice si comporterebbe in modo così diverso nei due ambienti?

UPDATE 1: Ho trovato questa domanda che sembra molto simile ma che finora il comando del compositore non ha risolto per problema. Laravel - CircleCI - Fails on phpunit

UPDATE 2: ho trovato this question che parla di autoloaging non funziona ... Essa suggerisce una nuova teoria ... Forse c'è un problema che coinvolge le differenze di sensibilità fra caso OSX (mio ambiente locale) e Ubuntu (CircleCI). Qui è il segmento rilevante della mia composer.json lima:

"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" 
    } 
}, 
+0

Le persone potrebbero avere più idee se mostri il codice reale che stai utilizzando. – jessica

+0

@jessica Ho aggiunto l'intestazione del file da cui proviene l'errore. Puoi pensare ad altro che sarebbe utile? Non penso che i test unitari effettivi siano rilevanti perché il problema non è un'asserzione fallita, piuttosto il vero errore del codice. – emersonthis

risposta

2

ho messo un po a posto ancora con il codice di esempio che hai dato, ma sembra che una parte dello spazio dei nomi è il caso sbagliato (API vs Api)?

Contrariamente a quanto si crede, le macchine OS X vengono formattate in modo non sensibile alle maiuscole e minuscole per impostazione predefinita, il che rende purtroppo più simili alle macchine Windows in questo senso.

+0

Buona cattura! Almeno ero sulla strada giusta ;-) – emersonthis