Symfony功能测试:接收上传的文件

时间:2013-04-04 14:03:38

标签: testing symfony upload phpunit

我有一个HTML表单,其中包含以下输入:<input type="file" name="sentFile" /> 表单尚未使用$this->createFormBuilder()生成。我写了一个extends WebTestCase的课程。其测试方法如下:

$crawler = $client->request('GET', '/users/import');
$buttonCrawlerNode = $crawler->selectButton('Import');
$form = $buttonCrawlerNode->form();
$testfile = 'import_users.csv';
$destination = 'F:/www/symfony/web/uploads/' . $testfile;
$form['sentFile']->upload($destination);
$form['myparam'] = 'hello';
$crawler = $client->submit($form);

但是当我使用phpunit命令运行测试时,接收已发布表单的控制器方法显示为空$_FILES。正确接收了另一个输入(myparam)。那么如何使用上传的文件?

PS:

  • 我没有成功在Symfony中使用PHPT(stackoverflow.com/questions/4922207/integrate-phpt-test-cases-with-phpunit/4925061)。
  • 我还没有尝试过Selenium

参考文献:

1 个答案:

答案 0 :(得分:1)

$_FILES的内容似乎无法更改以模拟文件上传,因此解决方案是使用http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html类。正如Jakub所说,当我按照我在问题中写的方式提交表单时,控制器的Request对象会填充此内容,因此我们可以使用$ request-&gt; files-&gt; get('sentFile ')获取与通过表单的UploadedFile输入发送的文件相对应的sentFile