Я использую simpleTest для записи моих тестов PHP. Я пишу, что файл загружает плагин, и задавался вопросом, как я могу тестировать его.
Я хотел бы проверить, что файл правильно загружается в правильной папке, что ошибка правильно возвращается при необходимости и т.д.
Как я эмулирую загрузку файла (через $ _FILES переменная)? Есть ли какие-либо проблемы, о которых я должен знать?
Я нашел альтернативное решение. Я подделал массив $ _ FILES
с тестовыми данными, создал фиктивные тестовые файлы в папке tmp /
(папка не имеет значения, но я попытался использовать значения по умолчанию).
Проблема заключалась в том, что is_uploaded_file
и move_uploaded_file
не могли работать с этими поддельными элементами, потому что они на самом деле не загружаются через POST
.
Первым делом я заключил эти функции в свои собственные moveUploadedFile
и isUploadedFile
в моем плагине, чтобы я мог издеваться над ними и изменять их возвращаемое значение.
Последним, что нужно было расширить класс при его тестировании и перезаписать moveUploadedFile
, чтобы использовать переименовать
вместо move_uploaded_file
и isUploadedFile
в используйте file_exists
вместо is_uploaded_file
.
Согласно документам, SimpleTest поддерживает тестирование FileUpload, появившееся с версии 1.0.1:
File upload testing Can simulate the input type file tag 1.0.1
Я просмотрел примеры на их сайте и предположим, что вы использовали что-то вроде
$this->get('http://www.example.com/');
$this->setField('filename', 'local path');
$this->click('Go');
для отправки файла, а затем использовали бы обычные утверждения для проверки правильности загрузки. Но на самом деле это просто дикая догадка, поскольку я не знаком с SimpleTest и не нашел примера на их домашней странице. Однако вы можете спросить на их форуме поддержки.
Но в основном нет особого смысла проверять, когда форма загружает файл. Это проверенное и проверенное поведение браузера. Больше смысла в тестировании кода, который обрабатывает загрузку. Я не знаю, как вы реализовали свой код FileUpload, но если бы мне пришлось это реализовать, я бы в первую очередь избавился от зависимости от массива $ _ FILES
. Создайте класс FileRequest
, которому вы можете передать массив $ _ FILES
. Затем вы можете обрабатывать загрузку из класса. Это позволит вам протестировать функциональность без фактической загрузки файла. Просто настройте свой экземпляр FileRequest соответствующим образом. Вы даже можете смоделировать файловую систему с помощью vfsStreamWrapper , так что вам даже не нужны настоящие файлы.
Вы можете сгенерировать загрузку файла программным способом, например, с помощью расширения curl.
Поскольку для этого требуется PHP, работающий под управлением веб-сервера, это не очень подходит для модульного тестирования. Следовательно, лучшим способом будет использование PHPT тестов и заполнение --POST_RAW--
секции данными.
Если вы не знаете, что поместить в раздел --POST_RAW--
, попробуйте установить расширение TamperData Firefox, выполнить отправку файла из Firefox и скопировать-вставить данные из правой части.