symfony - 在 Symfony2 中测试文件上传

标签 symfony file-upload phpunit integration-testing functional-testing

在 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 中测试它们。

编辑

我确信我做得对。因此,我为框架创建了一个测试并提出了拉取请求。 https://github.com/symfony/symfony/pull/1891

最佳答案

这是文档中的一个错误。

已修复 here :

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));

文档 here

关于symfony - 在 Symfony2 中测试文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916989/

相关文章:

unit-testing - 如何在 Symfony 包中设置特定于环境的参数?

php - Symfony Form Select2 允许用户输入新值

php - Symfony 2 - 如何将数据传递给 formBuilder?

javascript - 匿名 Google 云端硬盘上传创建新文件夹

使用 $mock->expects($this->at(...)) 时 PHPUnit "Mocked method does not exist."

javascript - 外部 js 文件中的 Symfony 2 翻译

file-upload - iOS Safari 13.3.1 上传文件大小为0

php - Composer 更新未在 Laravel 中安装 PHPUnit?

laravel - 仅在Gitlab CI中测试失败,本地成功

php - 在 Yii2 中获取 UploadedFile 实例的问题