Laravel에서 phpunit --coverage-text Uncaught Error: Class 'Route' not found 오류가 발생할 때 cover image

Laravel에서 phpunit --coverage-text Uncaught Error: Class 'Route' not found 오류가 발생할 때

김재동 • July 21, 2019

laravel test

합정 프로젝트에 다양한 서비스를 통합하기 위해서 서비스 별로 Service Provider를 생성하고 routes 파일을 나누어 정리하기 시작했다. 마침 인증센터를 통합하는 작업을 하고 있어서 인증센터의 routes 파일을 분리해서 저장하고 github에 commit을 push했는데 Travis CI에 아래와 같이 Build Failed 메시지가 떴다.

PHP Fatal error:  Uncaught Error: Class 'Route' not found in /home/travis/build/indischool/hapjeong/app/.../routes/web.php:3
Stack trace:

...

The command "vendor/bin/phpunit --coverage-text" exited with 255.

phpunit--coverage-text 라는 옵션이 있다는 것을 이때 처음 알았는데, phpunit 문서를 살펴보니 테스트 코드가 실제 소스 코드를 어느 정도 커버하고 있는지에 대해 분석해서 text로 보고하는 옵션이었다. 이 옵션을 주면 아래와 같이 phpunit 결과가 출력된다.

그냥 phpunit을 실행했을 때는 문제가 없는데 --coverage-text 옵션이 추가되면 Uncaught Error: Class 'Route' not found 오류가 발생했다. 구글링을 해서 stackoverflow 답변을 하나 찾았는데 본인이 자문자답을 했다. 정확한 원인은 알지 못하지만, 추측하건데 phpunit이 별도의 라우팅 파일에 있는 Route Facade를 제대로 이해하지 못해서 발생하는 문제 같다고 했다.

이 문제를 해결하기 위해서는 phpunit.xml 파일의 whitelist 필터에서 이 라우팅 파일을 아래와 같이 제외하면 된다.

<filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">./app</directory>
        <exclude>
            <file>./app/Services/Authorization/routes/web.php</file>
        </exclude>
    </whitelist>
</filter>