【问题标题】:Laravel Testing with storage fake带有存储假的 Laravel 测试
【发布时间】:2019-07-13 17:09:22
【问题描述】:

我开发了一个下载基于数据库生成的 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) .这是正确的方法吗?

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

请帮我做这个(优先是 storage::fake() 问题。)。

提前致谢。

【问题讨论】:

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

标签: php laravel phpunit faker


【解决方案1】:

为什么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') 会更安全。

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2010-09-29
    • 2016-04-13
    • 1970-01-01
    • 2021-08-12
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多