Загрузка файлов и модульное тестирование с помощью Zend Framework

Как лучше всего протестировать действие контроллера, которое получает загрузку файла с помощью Zend_Test_PHPUnit_ControllerTestCase?

В идеале $this->getRequest()->setPost() будет принимать имя файла в массиве данных, но, похоже, это не поддерживается.

На этом этапе я бы хотел загрузить / запустить мое приложение в командной строке и создать объект запроса для передачи переднему контроллеру. Это позволит обойти Zend_Test_PHPUnit_ControllerTestCase, но впоследствии я смогу проверить правильность загрузки файла через последующий $this->dispatch('/some/url') в ControllerTestCase. Однако я также озадачен тем, как с помощью этого метода поместить файл в объект запроса.

Единственное, что я могу попробовать прямо сейчас, - это запустить HTTP-сервер через командную строку, которая указывает на приложение (APPLICATION_ENV='testing'), и выполнить загрузку файла через Zend Http Client или CURL или что-то в этом роде. Это не кажется мне очень элегантным.

Кому-нибудь еще приходилось заниматься этой проблемой?

Спасибо!


person user131056    schedule 30.06.2009    source источник


Ответы (1)


Я бы рекомендовал взглянуть на модульные тесты из Zend_File_Transfer компонента. Они смогут немного разобраться в этом.

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

Я бы не стал беспокоиться о тестировании фактического процесса загрузки файла. Это область веб-сервера и языка; важно правильно проверить, что вы делаете с полученным (или не полученным) файлом.

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

person jason    schedule 30.06.2009
comment
Спасибо за указатель! В коде нет ничего особенного, действие контроллера создает экземпляр формы, проверяет, является ли запрос POST или нет, если это так: сделайте что-нибудь с файлом и поместите другие поля в базу данных, в противном случае верните представление с формой. Обычно ControllerTestCase достаточно хорошо работает для тестирования такого кода контроллера, но у него просто не было механизма для работы с файлом. Я попробую эту идею $ _FILES. Я бы хотел увидеть пример в тестовой ситуации кода контроллера, если у кого-нибудь есть пример, которым можно поделиться! - person user131056; 01.07.2009
comment
@jason: Я знаю, что это старый пост, но мне действительно нужна помощь. У меня аналогичная проблема: я пытаюсь протестировать загрузку файлов, и после получения файла у меня возникает довольно сложная логика. Я попытался взглянуть на модульные тесты, как вы предложили, но это немного выходит за рамки моего понимания. По сути, мне нужно проверить, что форма проверяется, файл загружен и отсортирован в нужном месте. - person blainarmstrong; 04.11.2014