Может войдёшь?
Черновики Написать статью Профиль

Переменные среды, специфичные для тестового окружения Laravel

перевод

В Laravel можно просто задать переменные среды, специфичные для вашего тестового окружения. Просто отредактируйте свой файл phpunit.xml и задайте их как записи блока <php>:

xml<php>
  <env name="APP_ENV" value="testing"/>
  <env name="CACHE_DRIVER" value="array"/>
  <env name="SESSION_DRIVER" value="array"/>
  <env name="QUEUE_DRIVER" value="sync"/>
  <env name="DB_DATABASE" value=":memory:"/>
  <env name="DB_CONNECTION" value="sqlite"/>
  <env name="TWILIO_FROM_NUMBER" value="+15005550006"/>
</php>

Но что делать, если вам вдруг понадобилось исключить их из контроля версий?

Мой пример

Я возвращаюсь к работе над PulledOver, в основе которого используется Twilio. Я захотел написать несколько тестов для моего класса TwilioClient, который напрямую подключается к API Twilio. Я использовал тестовые учётные данные Twilio для отправки ложных вызовов к API и проверки его ответов.

А это значит, что у меня есть SID и токен для Twilio , которые мне не нужно никому показывать, так? Я даже спросил в твиттере:

  1. ‎Matt Stauffer @stauffermatt
  2. #geek
  3. Что может случиться, если при работе с тестовыми учётными данными @twilio загрузить их в систему контроля версий? Не лучше было бы...

Я получил несколько ответов, и один из них от CEO Twilio (!):

  1. Jeff Lawson @jeffiel
  2. @stauffermatt @twilio Лучше их не загружать. Ведь мы можем ограничить скорость запросов к API для определённой учётной записи, а если весь мир будет использовать твою учётку...

Ок, значит мне надо исключить их. Но как? Я поразмыслил немного, написал вопрос в наш корпоративный мессенджер Slack, и отправился спать. А проснувшись обнаружил, что мне ответил всегда находчивый Кейт Дамьяни: используй Dotenv (который используется в Laravel для загрузки .env), чтобы загружать файл .env.test в базовом классе Laravel TestCase. ФУХ. Вот как это делается:

Использование .env.test в Laravel

Сначала создайте файл .env.test.example и заполните его заготовками для необходимых вам ключей:

confTWILIO_ACCOUNT_SID=fillmein
TWILIO_ACCOUNT_TOKEN=fillmein

Далее скопируйте .env.test.example в .env.test и заполните настоящими значениями.

Добавьте .env.testв свой файл .gitignore.

И наконец, в метод PHPcreateApplication() файла tests/TestCase.php добавьте такую строку: PHP$app = require __DIR__.'/../bootstrap/app.php';.

Недавно изменился синтаксис Dotenv, поэтому я покажу две разные версии:

PHP
// Старый Dotenv
if (file_exists(dirname(__DIR__) . '/.env.test')) {
    
Dotenv::load(dirname(__DIR__), '.env.test');
}

// Новый Dotenv
if (file_exists(dirname(__DIR__) . '/.env.test')) {
    (new \
Dotenv\Dotenv(dirname(__DIR__), '.env.test'))->load();
}

Вот и всё! Ваши переменные среды .env.test теперь помещены во все запускаемые тесты, которые наследуют TestCase, но эти значения безопасно хранятся вне контроля версий.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.