我正在开发一个 Laravel 站点,该站点利用本地存储来存储每日摘要文件,本质上是填充 JSON 的日志文件。我保存的文件夹位于
storage/history
目录中,我的许多功能都通过 storage_path('history')
访问该目录。我正在为该过程中涉及的函数编写 PHPUnit 测试,其中包括删除此摘要文件夹中所有文件的函数。我想避免删除真实的 storage/history
文件夹中的文件,因此我一直在探索指示 Laravel 使用不同文件夹进行这些操作的方法。 Storage::fake(...)
似乎是我需要的解决方案。然而,尽管多次尝试实现它,我还没有找到正确的方法。
Storage::fake(storage_path());
给我以下错误:
Storage::fake('storage');
失败,因为测试删除了真实文件。请帮助我理解我在这里做错了什么。如何伪造
storage_path()
文件夹进行测试?
模拟文件操作部分,而不是
storage_path()
。Storage::fake()
不相关。
use Illuminate\Support\Facades\File;
$file = storage_path('history/test.log');
File::delete($file);
测试
use Illuminate\Support\Facades\File;
File::shouldReceive('delete')->once();
添加历史盘。
// config/filesystems.php
'disks' => [
'history' => [
'driver' => 'local',
'root' => storage_path('history'),
],
使用方法
use Illuminate\Support\Facades\Storage;
Storage::disk('history')->put('test.log', 'test');
Storage::disk('history')->delete('test.log');
测试
use Illuminate\Support\Facades\Storage;
Storage::fake('history');
...
Storage::disk('history')->assertMissing('test.log');