Как сделать фактическую загрузку файла с phpunit и Laravel, это не подделка - PullRequest
0 голосов
/ 05 ноября 2018

Phpunit, Laravel 5.5 Как мне эмулировать, а не подделывать фактическую загрузку файлов с помощью phpunit и Laravel. Мой последний удар по этому так. Из модульного теста:

$handle = fopen($path,'r');
$content = fread($handle,2048);
fclose($handle);
$fdata = [
  'delimiter'           => '3',
  'id'                  => 1,
  'allow_shared_roles'  => 'on',
  'file'=>$name
];
$this->call('POST','/event/add-wizard/2',$fdata,[],[],[
    'Content-Length'=>strlen($content),
    'Content-Type'=>'multipart/form-data;boundary='.$content,
    'Content-Disposition'=>'form-data;name="file";filename="'.$name.'"'
  ],$content);

Тогда на стороне сервера, это где я вешаю трубку.

if ($request->hasFile('file')) {
    $input['extension'] = strtolower($request->file('file')->getClientOriginalExtension());
}
$validator = \Validator::make($input, ['file' => 'required', 'extension' => 'in:csv', 'delimiter' => 'required'], ['extension.in' => 'The file must be a .csv file.']);
if ($validator->fails()) {
    return \Redirect::back()->withInput()->withErrors($validator);
}

if (!file_exists(storage_path('temp-files'))) {
    \File::makeDirectory(storage_path('temp-files'));
}

$date = \Carbon\Carbon::now();

$tmpFile = $request->file('file')->move(storage_path('temp-files'), $date->format('YmdHis') . '_' . $request->file('file')->getClientOriginalName());

Затем я получаю нулевую ошибку на последней показанной строке.

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

1 Ответ

0 голосов
/ 07 ноября 2018

Подтвердив в комментариях, что вы хотите проверить, соблюдается ли процедура загрузки, вместо того, чтобы действительно загружать файл, вы можете смоделировать фасад File, чтобы увидеть, вызваны ли методы и с правильными параметрами (необязательно).

Чтобы смоделировать Фасад в Laravel, вы можете использовать метод build in shouldReceive('method_name'). В вашей ситуации вы можете добавить это до звонка:

// should create new directory
File::shouldReceive('makeDirectory')
                    ->once();

// should move the uploaded file to the dir
File::shouldReceive('move')
                    ->once()
                    ->andReturn( $fake_file );

Подробнее о насмешливых фасадах можно прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...