Тестирование Laravel с подделкой хранилища - PullRequest
0 голосов
/ 20 февраля 2019

Я разработал функцию для загрузки файла CSV, который генерируется на основе базы данных.Я создал тестирование для этого и работает нормально для меня.но проблема в том, что файл не удаляется после завершения теста.

Вопрос .Будет ли этот файл, созданный с использованием фальшивого хранилища, автоматически удален после полного запуска теста?если да, это не удалено для меня.пожалуйста, посмотрите на мою функцию тестирования.

/*Test file*/
public function testAmazonDailyPendingStatusReport(){
    //creating factories    
    Storage::fake('reportslocal');  
    $dailyStatus = new DailyStatus(
       new FileWriter(),
       new Filesystem(),
       Storage::disk('reportslocal')
   );
   $fileExported = $dailyStatus->export();
   //continuing assertions
}

/*export function*/
public function export(){
     //fetch data from database.
     //create file using SplFileObject
     //writing files into it.
     //storing to 'reportslocal' path
     //sending email to client with attached this file
}

Если файл не удаляется автоматически, что мне делать?или я могу использовать Storage::disk('reportslocal')->delete($fileExported) в моей тестовой функции.Это правильный путь?

Какое утверждение лучше всего проверить здесь?Я проверил, существование файла, номер столбца, последовательность заголовков столбцов и значение, проверьте содержимое файла.я что-то пропустил?

Пожалуйста, помогите мне сделать это (приоритет - проблема storage :: fake ().).

Заранее спасибо.

1 Ответ

0 голосов
/ 20 июня 2019

Почему Storage::fake()

Storage::fake() используется для настройки каталога на локальном диске для использования вашим набором тестов.Это помогает вам не изменять ваши фактические заданные диски хранения.

Если, например, ваш код использует диск s3, где все операции будут выполняться в сконфигурированной корзине AWS s3, вы можете позвонить Storage::fake('s3') и это заменит вашу облачную конфигурацию s3 на простой локальный диск без необходимости вообще изменять код, который вы тестируете.

Основной вопрос

Теперь, каждый раз, когда вы звоните Storage::fake('reportslocal'), он будет очищать файлы в указанном каталоге при вызове этого метода.Однако нет ничего, что автоматически очищает файлы после завершения теста.

Если вы хотите очистить каталог после завершения теста, у вас есть пара опций.

  1. вы можете просто позвонить Storage::fake('reportslocal') снова в конце вашего теста.Будет запущен код для очистки поддельного диска.

  2. Вы можете вызвать код, чтобы вручную очистить свой поддельный диск:

    (new Illuminate\Filesystem\Filesystem)->cleanDirectory(Storage::disk('reportslocal')->path(''))
    

    Осторожно здесь!Если вы запустили указанную выше команду, но сначала забыли подделать диск, вы очистите свой реальный диск.Так что, на самом деле, вам будет безопаснее просто позвонить Storage::fake('reportslocal') во второй раз в конце теста.

...