У меня есть сущность Symfony2 под названием MyUploadedFiles
и тип формы MyUploadedFilesType
с именем myuploadedfiles
, Этот тип формы создает форму с одним полем file
, Это поле не должно быть пустым, а остальные данные в сущности генерируются, как только пользователь загружает файл. Теперь я хочу запустить функциональный тест для моего контроллера, который обрабатывает загрузку. Но я всегда получаю ошибку file should not be blank
,
Это код в моем myUploadTest
метод:
$filepath = __DIR__.'/test_file.xml';
$xmlfile = new UploadedFile(
$filepath,
'foo.xml',
'text/xml',
\filesize($filepath)
);
$client->request(
'POST',
'/path/to/xml_upload',
array(),
array('myuploadedfiles[file]' => $xmlfile)
);
$response = $client->getResponse();
$this->assertEquals(Codes::HTTP_CREATED, $response->getStatusCode());
Контроллер выглядит так:
$form->bind($request);
if ($form->isValid()) { ... }
Если я отрисовываю форму с шаблоном ветки и пытаюсь загрузить что-то, все работает нормально. Так что, вероятно, ошибка где-то в тестовом коде.
Спасибо за помощь!
Я использую этот код:
# Select the file from the filesystem
# Path of the file to send
$filepath = __DIR__.'/test_file.xml';
$xmlfile = new UploadedFile(
$filepath,
'foo.xml',
'text/xml',
\filesize($filepath)
);
# Select the form (adapt it for your needs)
$form = $crawler->filter('input[type=submit]...')->form();
# Put the file in the upload field
$form['myuploadedfiles[file]']->upload($xmlfile);
# Send it
$crawler = $this->client->submit($form);
# Check that the file has been successfully sent
# (in my case the filename is displayed in a <a> link so I check
# that it appears on the page)
$this->assertEquals(
1,
$crawler->filter('a:contains("foo.xml")')->count()
);
Других решений пока нет …