2013-11-27 5 views
1

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

public function testIndexActionCanBeAccessed() 
{ 
    $this->dispatch('/', 'POST', array('test_file' => 'abcdefgh')); 
    $this->assertResponseStatusCode(200); 
} 

Проблема IST, что «test_file» В параметре обрабатывается как после параметра. Итак, мой вопрос: как я могу достичь того, что php/zf2 обрабатывает параметр как файл, а не как пост-параметр?

Я попытался найти ответ в документации zf2 и в файле «Zend \ Test \ PHPUnit \ Controller \ AbstractHttpControllerTestCase» без успеха.

+0

http://pierrerambaud.com/blog/php/2012-12-29-testing-upload-file-with-php – Sam

ответ

1

Ok благодаря ссылке Сэм предоставленной теперь я могу проверить загруженные файлы, так вот рабочий код, используя простую глобальную переменную $_FILES:

public function testIndexActionCanBeAccessed() 
{ 
    $_FILES['userfile']['name'] = 'testName'; 
    $_FILES['userfile']['tmp_name'] = 'path/to/fixture'; 

    $this->dispatch('/', 'POST'); 
    $this->assertResponseStatusCode(200); 
} 
2
// within some AbstractHttpControllerTestCase test method 
$upload = new \Zend\Stdlib\Parameters([ 
    'upload' => [ 
     'name' => 'blah.blah', 
     'type' => 'blah', 
     'tmp_name' => '/tmp/blah', 
     'error' => 0 
    ] 
]); 
$this->getRequest()->setFiles($upload); 
$this->dispatch('/url', 'POST'); 

Тогда в контроллере:

/** 
* Be strict on where you get file info! No blind unions. 
*/ 
$data = $request->getPost()->toArray(); 
$data['upload'] = current($request->getFiles()->toArray()); 
Смежные вопросы