2013-11-27 52 views
1

我想测试一个zf2控制器中的一个操作,该控制器接受一个文件并对其进行处理。我尝试以下代码,以便在后数据进行反应:在zf2上测试上传的文件

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

问题IST的是,“test_file里面” paramater被作为后参数进行处理。所以我的问题是,我怎么能实现该PHP/ZF2处理参数作为一个文件,而不是作为后期参数?

我试图找到ZF2文档和文件“的Zend \测试\ PHPUnit的\控制器\ AbstractHttpControllerTestCase”没有成功的答案。

+0

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

回答

1

好感谢萨姆提供我现在可以测试上传的文件的链接,所以这里是一个使用简单的全局变量$_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());