Как может я, тесты записи на файл загружают в PHP?

Я использую simpleTest для записи моих тестов PHP. Я пишу, что файл загружает плагин, и задавался вопросом, как я могу тестировать его.

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

Как я эмулирую загрузку файла (через $ _FILES переменная)? Есть ли какие-либо проблемы, о которых я должен знать?

16
задан pixelastic 4 August 2010 в 05:10
поделиться

3 ответа

Я нашел альтернативное решение. Я подделал массив $ _ FILES с тестовыми данными, создал фиктивные тестовые файлы в папке tmp / (папка не имеет значения, но я попытался использовать значения по умолчанию).

Проблема заключалась в том, что is_uploaded_file и move_uploaded_file не могли работать с этими поддельными элементами, потому что они на самом деле не загружаются через POST . Первым делом я заключил эти функции в свои собственные moveUploadedFile и isUploadedFile в моем плагине, чтобы я мог издеваться над ними и изменять их возвращаемое значение.

Последним, что нужно было расширить класс при его тестировании и перезаписать moveUploadedFile , чтобы использовать переименовать вместо move_uploaded_file и isUploadedFile в используйте file_exists вместо is_uploaded_file .

27
ответ дан 30 November 2019 в 16:36
поделиться

Согласно документам, 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 , так что вам даже не нужны настоящие файлы.

9
ответ дан 30 November 2019 в 16:36
поделиться

Вы можете сгенерировать загрузку файла программным способом, например, с помощью расширения curl.

Поскольку для этого требуется PHP, работающий под управлением веб-сервера, это не очень подходит для модульного тестирования. Следовательно, лучшим способом будет использование PHPT тестов и заполнение --POST_RAW-- секции данными.

Если вы не знаете, что поместить в раздел --POST_RAW--, попробуйте установить расширение TamperData Firefox, выполнить отправку файла из Firefox и скопировать-вставить данные из правой части.

5
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: