Symfony FileFormField - 测试(WebTestCase)多文件上传

问题描述 投票:1回答:1

在我的Symfony Web应用程序中,我有一个允许多个文件上传的表单(通过设置multipleFileType属性等于true可以轻松完成)。这很好用:我可以选择多个文件并上传它们。处理表单并获取所有上传的文件也很顺利。但是,当然,我想预见一个集成测试(WebTestCase)但我没有发现任何模拟多文件上传的可能性。

我现在拥有的:

...
$uploadedFile = new UploadedFile(...);
$form = ...; // get the form from the crawler
$form['formtype[filename]'][0]->upload($uploadedFile);
$this->client->submit($form);
...

这很好。

但现在我想通过1个表单提交上传2个文件(因为当一次上传多个文件时,处理逻辑的行为会有所不同)。我怎样才能做到这一点?当我看到http://api.symfony.com/3.0/Symfony/Component/DomCrawler/Field/FileFormField.html时,我看不到任何传递方式,例如,一组UploadedFile对象。谁有这方面的体验?

forms symfony
1个回答
0
投票

如果设置了multiple属性,则crawler将使用单个FileFormField字段创建文件表单字段数组。一个字段可以容纳单个文件,因此您需要多个字段用于多个文件。我通过手动向表单添加更多FileFormField来找到解决方案。

$form = ...
// get file field node in DOM
$node = $crawler->filter("input[name='formtype[filename][]']")->getNode(0);

// add additional fields to form (you can create as many as you need)
$newField = new FileFormField($node);
$form->set($newField);
...
// set files with upload()
$form['formtype[filename]'][0]->upload($uploadedFile1);
$form['formtype[filename]'][1]->upload($uploadedFile2);
...

//or with submit values 
$crawler->submit($form, [
  ...
 'formtype[filename]' => [$uploadedFile1, $uploadedFile2]

]);
© www.soinside.com 2019 - 2024. All rights reserved.