You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CakePHP 4+PHPUnit测试:如何构造Laminas\Diactoros\UploadedFile实例

解决方法

直接在测试代码中实例化Laminas\Diactoros\UploadedFile对象,替换掉$data里原来字符串格式的image_file字段即可,具体操作如下:

  1. 引入UploadedFile类
    在测试文件顶部添加use语句:

    use Laminas\Diactoros\UploadedFile;
    
  2. 准备测试文件
    确认你指定的测试文件真实存在且路径正确,比如示例里的tests/Fixture/csv/student-import-test-1.csv,保证文件可读。

  3. 创建UploadedFile实例
    用文件相关参数构造实例:

    // 获取测试文件的真实路径
    $filePath = realpath('tests/Fixture/csv/student-import-test-1.csv');
    // 打开文件流
    $fileStream = fopen($filePath, 'r');
    
    // 实例化UploadedFile
    $uploadedFile = new UploadedFile(
        $fileStream,
        filesize($filePath), // 文件大小
        UPLOAD_ERR_OK, // 上传成功的错误码标识
        'student-import-test-1.csv', // 客户端显示的文件名
        'text/csv' // 文件媒体类型
    );
    
  4. 修改$data数组
    把$data中原来的image_file相关子字段全部删除,替换成刚创建的UploadedFile实例:

    $data=[
        'name' => 'AñadirAnimal',
        'image_file' => $uploadedFile, // 替换为UploadedFile实例
        'specie' => 'dog',
        'chip' => 'no',
        'sex' => 'intact_male',
        'race' => 'cat',
        'age' => 1,
        'information' => 'Es un animal.',
        'state' => 'sick',
        'animal_shelter' => [
            'start_date' => '2022-11-03 10:47:38',
            'end_date' => '2023-05-03 10:47:38',
            'user_id' => 1,
            'animal_id' => 1
        ]
    ];
    
  5. 可选操作
    手动设置的$_FILES数组可以删除,因为直接传入UploadedFile实例后,框架的Request对象会正确识别这个上传文件,无需额外模拟全局变量。

补充说明

  • UploadedFile的构造参数顺序为:文件资源/路径、文件大小、上传错误码、客户端文件名、媒体类型
  • 如果需要验证控制器的图片类型校验逻辑,建议换成真实的png/jpg格式文件,同时把媒体类型改成对应的image/png或image/jpeg

内容的提问来源于stack exchange,提问作者Iria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:27:00