CakePHP/phpunit:如何模拟文件上传

eme*_*his 5 php phpunit cakephp cakephp-3.0

我正在尝试为需要附加CSV文件的发布请求的端点编写测试.我知道要模拟这样的帖子请求:

$this->post('/foo/bar');
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何添加文件数据.我尝试手动设置$_FILES数组,但它不起作用...

$_FILES = [
        'csvfile' => [
            'tmp_name' => '/home/path/to/tests/Fixture/csv/test.csv',
            'name' => 'test.csv',
            'type' => 'text/csv',
            'size' => 335057,
            'error' => 0,
        ],
];
$this->post('/foo/bar');
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

eme*_*his 1

据我所知,CakePHP 神奇地组合了$_FILES$_POST等的内容,因此我们可以从 访问每个内容$this->request->data[...]。您可以使用可选的第二个参数将信息传递给该数据数组:

$data = [
        'csvfile' => [
            'tmp_name' => '/home/path/to/tests/Fixture/csv/test.csv',
            'name' => 'test.csv',
            'type' => 'text/csv',
            'size' => 45,
            'error' => 0,
        ],
];
$this->post('/foo/bar', $data);
Run Code Online (Sandbox Code Playgroud)