我开发了一种功能,可以下载基于数据库生成的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()问题。)
先谢谢了。
答案 0 :(得分:0)
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')
会更安全。