php - 存储中的模拟文件以在 Laravel 中下载

标签 php laravel laravel-5.6

有没有办法使用 Laravel 模拟文件 Storage::fake()方法?

我用过 https://laravel.com/docs/5.7/mocking#storage-fake作为我测试的基础,它适用于上传。但是我的下载测试很难看,因为我每次都必须先通过模拟上传运行我的上传路线 UploadedFile::fake()->image('avatar.jpg') .有没有办法跳过那部分并模拟文件直接存在于假存储系统中?

public function testAvatarUpload()
{
    Storage::fake('avatars');

    // This is the call I would like to change into a mocked existing uploaded file
    $uploadResponse = $this->json('POST', '/avatar', [
        'avatar' => UploadedFile::fake()->image('avatar.jpg')
    ]);

    // Download the first avatar
    $response = $this->get('/download/avatar/1');

    $response->assertStatus(200);
}

最佳答案

我可能来晚了。但想帮助访问此问题的其他人提供实现它的想法。

这是一个带有一些断言的示例。

<?php

namespace Tests\Feature\Upload;

use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;

class SampleDownloadTest extends TestCase
{
    /**
     * @test
     */
    public function uploaded_file_downloads_correctly()
    {
        //keep a sample file inside projectroot/resources/files folder
        //create a file from it
        $exampleFile = new File(resource_path('files/test-file.png'))
        //copy that file to projectroot/storage/app/uploads folder
        Storage::putFileAs('/uploads', $exampleFile, 'test-file.png');

        //make request to file download url to get file 
        $response = $this->get("/files/file/download/url");

        //check whethe response was ok
        $response->assertOk();
        $response->assertHeader('Content-Type', 'image/png')
        //check whether file exists in path
        Storage::assertExists('/uploads/test-file.png');
        //do some more assertions.....
        //after test delete the file from storage path
        Storage::delete('uploads/test-file.png');
        //check whether file was deleted
        Storage::assertMissing('/uploads/test-file.png');
    }
}

关于php - 存储中的模拟文件以在 Laravel 中下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925082/

相关文章:

php - 如何检查远程文件大小和日期?

php - Laravel 中某个字段出现次数最多的查询

php - Eloquent 存储表单数据

javascript - Laravel 5.6 - 选中复选框时增加数字

node.js - 全新安装的 laravel 5.6 中 npm 安装错误

php - Laravel 将参数值从路由固定到 Controller

php - Laravel 错误在 Debug模式下太误导以太了,有什么方法可以有更清晰的错误吗?

php - 预配置 CakePHP,具有身份验证等常见功能

php - 使用 Doctrine 2 转储数据库数据

Laravel 使用 .htaccess 强制 HTTPS 使用 Amazon ELB 重定向太多