Задать вопрос
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...

Где хранить ключи api используемые для тестирования открытого по?

Есть публичный composer пакет для отправки sms через стороннее api. Для unit тестов нужно где-то хранить ключ api чтобы конечные пользователи пакета могли подставить свой ключ и выполнить тесты. Сейчас это делается через env переменную задаваемую через конфиг phpunit. Собственно вопрос как/где лучше организовать передачу и хранение ключа?
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Что-то у вас намешано.
Юнит-тестам не нужен никакой ключ (подойдёт любая строка). Конечным пользователям не нужно тестировать пакет, разумнее его мокать.

Но если хочется всё-таки проверить, например, корректность инициализации, то решение о том, как создавать инстанс класса библиотеки, за конечным пользователем. То есть, пользователь передаёт в конструктор какую-то строку. Где он эту строку возьмёт - зависит от конкретного приложения. Современный стандарт - заполнять контейнер конфига из ENV, а потом этот контейнер использовать. Следовательно, зашивать строку в phpunit.xml - вполне нормальное решение. Если на конкретном проекте это почему-то не работает, то нужно обсуждать предметно.
Ответ написан
Vamp
@Vamp
Стандартной практикой является коммит в репозиторий файла phpunit.xml.dist в который прописываются все настройки по умолчанию, кроме чувствительных к безопасности (api ключи, пароли и пр). Файл phpunit.xml добавляется в .gitignore. Таким образом, если пользователю нужно кастомизировать какие-то параметры, он просто копирует файл phpunit.xml.dist в phpunit.xml и добавляет свои секреты в последний. Это безопасно, так как phpunit.xml заигнорен.

То что вы описываете - это уже не unit, а интеграционное тестирование. Скрипты для интеграционного тестирования обычно делают в отдельном testsuite и скипаются по умолчанию. Для запуска юнит тестов не должна требоваться какая-либо подготовка - только "склонировал репозиторий, запустил". Для интеграционных подготовка уже нужна. Например, юзер должен будет модифицировать phpunit.xml (не .dist!), вписав туда свой тестовый api ключ.

Соответственно, для юнит тестов достаточно в тестируемый код передать мокнутого http клиента, который будет возвращать ответ, который вернуло бы реальное стороннее api (в guzzle это делается с помощью MockHandler). Поэтому если надо просто запустить юнит тест, то ничего делать не нужно - phpunit автоматически подхватит phpunit.xml.dist, если не найдет phpunit.xml. Если надо запустить интеграционные, то юзер должен будет скопировать phpunit.xml.dist в phpunit.xml и добавить туда api ключ.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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