Php 使用存储模拟进行拉威尔测试

Php 使用存储模拟进行拉威尔测试,php,laravel,phpunit,faker,Php,Laravel,Phpunit,Faker,我已经开发了一个功能下载CSV文件生成的基础上的数据库。 我已经为此创建了测试,并且工作得很好。但问题是,在完成测试运行后,文件不会被删除 问题。测试完成后,使用storage fake创建的此文件是否会自动删除?如果是,则不会为我删除它。请检查我的测试功能 /*Test file*/ public function testAmazonDailyPendingStatusReport(){ //creating factories Storage::fake('repo

我已经开发了一个功能下载CSV文件生成的基础上的数据库。 我已经为此创建了测试,并且工作得很好。但问题是,在完成测试运行后,文件不会被删除

问题。测试完成后,使用storage fake创建的此文件是否会自动删除?如果是,则不会为我删除它。请检查我的测试功能

/*Test file*/
public function testAmazonDailyPendingStatusReport(){
    //creating factories    
    Storage::fake('reportslocal');  
    $dailyStatus = new DailyStatus(
       new FileWriter(),
       new Filesystem(),
       Storage::disk('reportslocal')
   );
   $fileExported = $dailyStatus->export();
   //continuing assertions
}

/*export function*/
public function export(){
     //fetch data from database.
     //create file using SplFileObject
     //writing files into it.
     //storing to 'reportslocal' path
     //sending email to client with attached this file
}
如果文件没有自动删除,我该怎么办?或者我可以在测试函数中使用
Storage::disk('reportslocal')->delete($fileExported)
. 这是正确的方式吗

这里要检查的最佳断言是什么? 我已经检查了,文件是否存在,列编号,列标题顺序,以及值,检查了文件的内容。有什么我错过的吗

请帮我做这件事(优先级是存储::fake()问题)

提前谢谢

为什么
Storage::fake()
Storage::fake()
用于在本地磁盘上设置目录,供测试套件使用。这有助于防止您修改实际定义的存储磁盘

例如,如果您的代码正在使用
s3
磁盘,其中所有操作都将命中您配置的AWS s3存储桶,那么您可以调用
Storage::fake('s3')
,它将使用一个简单的本地磁盘替换您的s3云配置,而不必修改您正在测试的代码

主要问题 现在,每次调用
Storage::fake('reportslocal')
,它都会在调用该方法时清除定义目录中的文件。但是,一旦测试完成,就不会自动再次清除文件

如果您想在测试完成后清空目录,您有几个选项

  • 您可以在测试结束时再次调用
    Storage::fake('reportslocal')
    。这将运行代码清除假磁盘

  • 您可以自己调用代码手动清除假磁盘:

    (new Illuminate\Filesystem\Filesystem)->cleanDirectory(Storage::disk('reportslocal')->path(''))
    
    小心!如果您运行上述命令,但忘记先伪造磁盘,则会清空真正的磁盘。因此,实际上,在测试结束时再次调用
    Storage::fake('reportslocal')
    会更安全


  • 您可以尝试使用php的unlink函数,只需将文件的确切路径传递给unlink函数即可删除该文件。我的问题是该文件是否会自动删除?如果是,我在我的职能中遗漏了什么。如果没有,那么storage::fake的确切用途是什么?我使用的是laravel 5.7默认情况下,假方法将删除其临时目录中的所有文件。如果您想保留这些文件,可以使用“persistentFake”方法。但是,该文件不会为我删除。你能帮我找出我犯的错误吗?+1回答这个问题。这些文件保留在目录
    storage/framework/testing/disks/[fakediskname]
    中。这不一定是一个大问题,因为您可以忽略这些文件,并且在重新运行测试时这些文件会被覆盖而不会出现问题。但是你会希望这些文件被清理干净。