Загрузка файла тестирования в Symfony2 - PullRequest
15 голосов
/ 02 августа 2011

В документации Symfony2 приведен простой пример:

$client->request('POST', '/submit', array('name' => 'Fabien'), array('photo' => '/path/to/photo'));

Для имитации загрузки файла.

Однако во всех моих тестах я не получаю ничего в объекте $ request в приложении и ничего в массиве $_FILES.

Вот простой WebTestCase, который терпит неудачу. Он самодостаточен и тестирует запрос, который $client создает на основе параметров, которые вы передаете. Это не тестирование приложения.

class UploadTest extends WebTestCase {

    public function testNewPhotos() {
        $client = $this->createClient();
        $client->request(
            'POST', 
            '/submit', 
            array('name' => 'Fabien'), 
            array('photo' => __FILE__)
        );

        $this->assertEquals(1, count($client->getRequest()->files->all()));
    }
}

Просто чтобы прояснить ситуацию. Это не вопрос о том, как делать загрузку файлов, что я могу сделать. Речь идет о том, как проверить их в Symfony2.

Редактировать

Я убежден, что все делаю правильно. Итак, я создал тест для Framework и сделал запрос на выборку. https://github.com/symfony/symfony/pull/1891

Ответы [ 4 ]

13 голосов
/ 16 апреля 2012

Это была ошибка в документации.

Исправлено здесь :

use Symfony\Component\HttpFoundation\File\UploadedFile;

$photo = new UploadedFile('/path/to/photo.jpg', 'photo.jpg', 'image/jpeg', 123);
// or
$photo = array('tmp_name' => '/path/to/photo.jpg', 'name' => 'photo.jpg', 'type' => 'image/jpeg', 'size' => 123, 'error' => UPLOAD_ERR_OK);

$client = static::createClient();
$client->request('POST', '/submit', array('name' => 'Fabien'), array('photo' => $photo));

Документация здесь

4 голосов
/ 10 февраля 2015

Вот код, который работает с Symfony 2.3 (я не пробовал с другой версией):

Я создал photo.jpg файл изображения и поместил его в Acme \ Bundle \ Tests \ uploads .

Вот выдержка из Acme \ Bundle \ Tests \ Controller \ AcmeTest.php :

function testUpload()
{
    # Open the page
    ...

    # Select the file from the filesystem
    $image = new UploadedFile(
        # Path to the file to send
        dirname(__FILE__).'/../uploads/photo.jpg',
        # Name of the sent file
        'filename.jpg',
        # MIME type
        'image/jpeg',
        # Size of the file
        9988
    );

    # Select the form (adapt it for your needs)
    $form = $crawler->filter('input[type=submit]...')->form();

    # Put the file in the upload field
    $form['... name of your field ....']->upload($image);

    # 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("filename.jpg")')->count()
    );
}
2 голосов
/ 07 ноября 2011

Я думаю, что этот вопрос должен быть закрыт или помечен как ответ, я следую за этим разговором: github.com/symfony/symfony/pull/1891, и кажется, что это просто проблема с документацией.

1 голос
/ 25 августа 2015

Я нашел эту статью, https://coderwall.com/p/vp52ew/symfony2-unit-testing-uploaded-file, и отлично работает.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...