Laravel使用伪造的存储进行测试

时间:2019-02-20 04:55:42

标签: php laravel phpunit faker

我开发了一种功能,可以下载基于数据库生成的CSV文件。 我已经为此进行了测试,并且对我来说工作正常。但是问题是在完成测试运行后,文件没有被删除。

问题。测试完全运行后,使用存储伪造品创建的此文件是否会自动删除?如果是的话,它不会为我删除。请查看我的测试功能。

/*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) 。这是正确的方法吗?

这里要检查的最佳断言是什么? 我检查了文件的存在,列号,列标题序列和值,检查了文件的内容。我有什么想念的吗?

请帮助我做到这一点(优先级是storage :: fake()问题。)

先谢谢了。

1 个答案:

答案 0 :(得分:0)

为什么Storage::fake()

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

例如,如果您的代码使用的是s3磁盘,其中所有操作都将击中已配置的AWS s3存储桶,则可以调用Storage::fake('s3'),它将换出您的s3云配置只需一个简单的本地磁盘,而无需修改您要测试的代码。

主要问题

现在,每次调用Storage::fake('reportslocal')时,将在调用该方法时清除已定义目录中的文件。但是,一旦完成测试,没有什么可以自动再次清除文件。

如果要在测试完成后清空目录,则有两种选择。

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

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

    (new Illuminate\Filesystem\Filesystem)->cleanDirectory(Storage::disk('reportslocal')->path(''))
    

    在这里小心!如果您运行上述命令,但首先忘记伪造磁盘,则将清空实际磁盘。因此,实际上,在测试结束时再次打电话给Storage::fake('reportslocal')会更安全。