Манипулировать объектом Symfony 2 UploadFile в модульном тесте

1

Я работаю над проектом Symfony2. Я создал простой класс TempFile для управления UploadFile. Вот мой конструктор:

public function __construct(UploadedFile $file, $destination, $suffix)
{
    $this->file             = $file;
    $this->destination      = $destination;
    $this->fileId           = sprintf('%s_%s', uniqid(), (string) $suffix);
}

И мой метод move

public function move()
{
    $extension = $this->file->guessExtension();
    if (!$extension) {
        throw new \Exception(__METHOD__ . ' -> Unable to detect extension');
    }

    $this->tmpFileName = sprintf('%s.%s', $this->fileId, $extension);
    $this->file->move($this->destination, $this->tmpFileName);
}

Я пытаюсь создать объект UploadFile в своем тесте, и вот что я сделал:

protected function setUp()
{
    $this->file = tempnam(sys_get_temp_dir(), 'upload');
    imagepng(imagecreatetruecolor(10, 10), $this->file);
    $this->uploadedFile = new UploadedFile($this->file, "test.png");
}

public function testMoveWithAValidUploadedFile()
{
    $tempFile = new TempFile($this->uploadedFile, '/tmp', 'tmp');
    $tempFile->move();
    // Future assertion
}

У меня есть следующая ошибка:

Symfony\Component\HttpFoundation\File\Exception\FileException: The file "test.png" was not uploaded due to an unknown error

Есть идеи?

спасибо, С уважением

Теги:
file
unit-testing

1 ответ

1
Лучший ответ

Из памяти Symfony2 проверяет, был ли файл загружен как часть запроса, используя is_uploaded_file(). Это можно переопределить, используя тестовый режим класса UploadedFile. Вы также можете определить, какой код ошибки загрузки PHP является успешным.

copy(__DIR__ . '/Fixtures/test.pdf', '/tmp/test.pdf');
new UploadedFile(
    '/tmp/test.pdf',
    'original.pdf',
    null,
    null,
    UPLOAD_ERR_OK,
    true /* test */
)
  • 0
    Полезно в моем случае, спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню