@JeanPaulBelmondo

Тесты Laravel, config() или env()?

собственно, что, по-вашему правильнее использовать в тестах?

лично я был всегда уверен, что env() только для конфигурационных файлов, а в остальном приложении его использовать вообще моветон
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Используйте в основном коде и тестах только config().
Это связано с тем, что у вас в приложении всегда должен быть только одни источник данных.

Простой пример из дефолтной сборки Laravel. В app.php есть строка:
'name' => env('APP_NAME', 'Laravel'),
Самое просто, что вы можете сделать, это вызвать config('app.name') где-нибудь в коде, чтобы получить данные из этой настройки. Вот только если вы вызовите env('APP_NAME') вы, возможно, получите ошибку, в случае, если эта переменная не задана в переменных среды.
Но как вы видите из кода выше, она совершенно необязательно должна быть задана в переменных среды, так как для неё задано значение по умолчанию: Laravel. А значения в конфиге могут быть вообще самой разной степени извращённости. И они могут составляться из частей. Например:
'endpoint' => 'https://' . env('API_DOMAIN') . '/some/subroute',


Это банальный и простой пример. Но на большой проекте с массой переменных и настроек вы однозначно столкнётесь с трудностями такого рода.

Ваша задача сделать код удобным и читаемым. Чтобы будущие программисты могли распутать макаронину, что вы сплели. А разнообразие источников данных только запутает читателя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Всё что нужно знать про использование функции env()

If you execute the config:cache command during your deployment process, you should be sure that you are only calling the env function from within your configuration files. Once the configuration has been cached, the .env file will not be loaded and all calls to the env function will return null.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы