2009-06-30 2 views
2

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

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

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

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

Кому-то еще пришлось иметь дело с этой проблемой?

Спасибо!

ответ

6

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

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

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

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

+0

Спасибо за указатель! Код ничего особенного, действие контроллера создает экземпляр формы, проверяет, является ли запрос POST или нет, если это так: сделайте что-то с файлом и поместите другие поля в базу данных, иначе верните представление в форму. Обычно ControllerTestCase работает достаточно хорошо для тестирования такого типа кода контроллера, но у него просто не было механизма для работы с файлом. Я попробую эту идею $ _FILES. Мне бы хотелось увидеть пример в тестовой ситуации с кодом контроллера, если у кого-нибудь есть пример для обмена! – user131056

+0

@jason: Я знаю, что это старый пост, но мне действительно нужна помощь. У меня есть аналогичная проблема: я пытаюсь протестировать загрузку файлов, и после получения файла у меня есть довольно сложная логика. Я пробовал смотреть на модульные тесты, как вы предполагали, но это немного выходит за рамки моего понимания. В принципе, мне нужно проверить, что форма проверяется, файл загружен и сортируется в нужном месте. – blainarmstrong

Смежные вопросы