【问题标题】:Symfony functional tests: receive uploaded fileSymfony 功能测试:接收上传的文件
【发布时间】:2013-04-04 14:03:38
【问题描述】:

我有一个 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

参考资料:

【问题讨论】:

  • 会调用 $request->files->keys() 在你的控制器中返回任何东西吗?
  • 谢谢Jakub,这解决了我的问题!我不知道这个属性。所以我收到了这个 UploadedFile 对象并请求它的属性来映射我之前在文件处理代码中使用的 $_FILE 的属性。
  • 只是想问一下uplaod目录的绝对路径'F:/www/symfony/web/uploads/'是否是一个好习惯?

标签: testing symfony upload phpunit


【解决方案1】:

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

【讨论】:

  • 没错。始终在全局变量上使用来自 HttpFoundation 的 Symfony 抽象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2015-10-29
相关资源
最近更新 更多