如何在Laravel 8中模拟按需创建的存储磁盘
针对Laravel按需存储磁盘的测试Fake方案
- 方案1:给按需磁盘指定固定名称(推荐,对业务代码侵入极小)
你可以在业务代码创建按需磁盘时,给Storage::build()方法传入第三个参数作为该磁盘的自定义名称,业务代码示例:
测试时直接fake对应的自定义名称即可,和常规命名磁盘的用法完全一致:// $config 为从数据库读取的存储配置数组 $disk = Storage::build($config, [], 'dynamic_custom_disk');Storage::fake('dynamic_custom_disk'); // 执行业务代码后可直接调用断言方法 Storage::disk('dynamic_custom_disk')->assertExists('要验证的文件路径'); - 方案2:无需修改业务代码,Mock
build方法返回Fake实例
如果不想改动业务代码添加磁盘名,可以在测试中拦截Storagefacade的build方法调用,直接返回fake的磁盘实例:// 先创建一个临时fake磁盘 $fakeDisk = Storage::fake('temp_dynamic_disk'); // 拦截所有build方法调用,直接返回上面的fake实例 Storage::shouldReceive('build') ->andReturn($fakeDisk); // 执行业务代码后,直接用$fakeDisk做断言 $fakeDisk->assertExists('要验证的文件路径');
如果需要区分多个不同配置的按需磁盘,也可以给shouldReceive添加参数匹配规则,根据传入的配置返回对应的fake实例即可。
内容的提问来源于stack exchange,提问作者tuscan88
相关产品推荐
相关产品推荐

