Как проверить маршрут в Laravel, который использует и `Storage :: put ()` и `Storage :: временный_рл ()`? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть маршрут в Laravel 7, который сохраняет файл на диск S3 и возвращает ему временный URL. Упрощенный код выглядит следующим образом:

Storage::disk('s3')->put('image.jpg', $file);
return Storage::disk('s3')->temporaryUrl('image.jpg');

Я хочу написать тест для этого маршрута. Обычно это просто с Laravel. Я издеваюсь над хранилищем с помощью Storage::fake('s3') и утверждаю создание файла с помощью Storage::disk('s3')->assertExists('image.jpg').

. Поддельное хранилище не поддерживает Storage::temporaryUrl(). При попытке использовать этот метод он выдает следующую ошибку:

Этот драйвер не поддерживает создание временных URL-адресов.

Обычный обходной путь должен использовать * API низкоуровневого моделирования 1034 *, подобный следующему:

Storage::shouldReceive('temporaryUrl')
  ->once()
  ->andReturn('http://examples.com/a-temporary-url');

Это решение рекомендуется в потоке LaraCasts и GitHub, выпуск об этом ограничении Storage::fake().

Можно ли как-нибудь объединить эти два подхода для проверки маршрута, который выполняет оба действия?

Я бы хотел избежать повторной реализации Storage::fake(). Также я хотел бы избежать добавления проверки в производственный код, чтобы не вызывать Storage::temporaryUrl(), если среда тестирует. Последний - это еще один обходной вариант, предложенный в ветке LaraCasts , уже упомянутой выше.

...