我想在zf2控制器中测试一个采取文件并处理它的动作。我尝试使用以下代码对帖子数据做出反应:
public function testIndexActionCanBeAccessed()
{
$this->dispatch('/', 'POST', array('test_file' => 'abcdefgh'));
$this->assertResponseStatusCode(200);
}
问题在于'test_file'参数是作为post参数处理的。所以我的问题是,我怎样才能实现php / zf2将参数作为文件而不是作为后置参数处理?
我试图在zf2文档和文件'Zend \ Test \ PHPUnit \ Controller \ AbstractHttpControllerTestCase'中找到答案但没有成功。
答案 0 :(得分:3)
// 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());
答案 1 :(得分:1)
好的,感谢Sam提供的链接我现在可以测试上传的文件了,所以这里是使用简单的全局变量 $_FILES
的工作代码:
public function testIndexActionCanBeAccessed()
{
$_FILES['userfile']['name'] = 'testName';
$_FILES['userfile']['tmp_name'] = 'path/to/fixture';
$this->dispatch('/', 'POST');
$this->assertResponseStatusCode(200);
}