Пожалуйста, укажите любые наивные или неверные предположения о Laravel, Composer, PHPUnit и т. Д., Которые я делаю
У меня был класс SpeechToTextHelper, который был внутри проекта Laravel, и он использовал такие фасады, как это:
use Cache;
use Log;
use Storage;
Затем, так как я хотел поделиться им между несколькими проектами Laravel, я переместил его в отдельный репозиторий и потребовал (в первом проекте) в качестве зависимости через Composer.
Кажется, что код работает нормально.
Мой вопрос отличается от Использование Laravel Facades за пределами Laravel
То, что я хочу знать, это:
- Теперь, когда я также хочу написать тесты PHPUnit для SpeechToTextHelper в моем новом инструментальном репозитории, я вижу ошибки, подобные
RuntimeException: A facade root has not been set.
и Error: Class 'Log' not found
, предположительно, потому что этот инструментальный репозиторий не знает о Laravel.Я предполагаю, что это означает, что мой производственный код работал только с побочным эффектом. - В моем новом инструментальном репозитории (где сейчас находится мой SpeechToTextHelper), как я должен указать (возможно, где-то в composer.json?)что код будет работать только в том случае, если фасады Laravel существуют и правильно инициализированы?
Как я могу исправить код моего отдельного репо, чтобы его тесты могли выполняться, а также чтобы он мог быть только "требуется "для проекта Laravel?
PS https://laravel.com/docs/5.7/facades говорит" При создании стороннего пакета, взаимодействующего с Laravel, лучше вводить контракты Laravel (https://laravel.com/docs/5.7/contracts) [которые работаютв их собственном GitHub-репозитории] вместо использования фасадов. "" Если вы создаете пакет, вам следует серьезно рассмотреть возможность использования контрактов, поскольку их будет проще тестировать в контексте пакета. "
Но я не вижуконтракты на бревно или хранение вообще.