在zf2中测试上传的文件

时间:2013-11-27 20:53:02

标签: file post controller zend-framework2 phpunit

我想在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'中找到答案但没有成功。

2 个答案:

答案 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);
}