Ответ 1
Объяснение
Это действительно интересно. Вы уже много заметили при создании этого сообщения (если у кого-то проблема, следует внимательно его прочитать).
В этом commit, как вы уже упоминали, параметр $testing
был удален, а код классов был упрощен, удалив Reflection, чтобы получить testing
значение свойства Symfony\Component\HttpFoundation\File\UploadedFile
.
И теперь сложно понять, что в зависимости от того, что вы тестируете, вы можете не заметить изменения, и все может сработать, но в некоторых случаях этого не произойдет, и вы действительно не знаете, почему.
Например, все может работать - файл будет загружен без проблем, но если вы добавите в свой класс Request пример mimes
, например:
'logo' => ['mimes:jpeg,png'],
он не сообщит вам, что у файла есть недопустимый mime (это потому, что внутренне он также будет проверен, если файл действительно загружен, а в случае тестов на самом деле он не совпадает с реальной загрузкой).
Решение снова смотрит на то, что действительно было изменено на фиксацию и как выглядит метод. В этот файл экземпляр загруженного файла возвращается следующим образом:
return $file instanceof static ? $file : new static(
$file->getRealPath(), $file->getClientOriginalName(), $file->getClientMimeType(),
$file->getClientSize(), $file->getError()
);
поэтому в случае, если файл является экземпляром этого класса, он вернет этот экземпляр немодифицированным, иначе он создаст объект теперь, не передав аргумент $testing
конструктору класса.
Решение
Итак, чтобы решить эту проблему, при тестировании загрузки файлов вы не должны использовать
\Symfony\Component\HttpFoundation\File\UploadedFile
. Теперь вы должны использовать
\Illuminate\Http\UploadedFile
чтобы не возникало каких-либо странных проблем при тестировании загрузки файлов (конечно, вы все равно должны перейти к этому конструктору объектов true
как $testing
, но теперь он будет использоваться позже без проблем)