합정 프로젝트에 다양한 서비스를 통합하기 위해서 서비스 별로 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>