我在 Laravel 7 中有一条路线,可以将文件保存到 S3 磁盘并返回一个临时 URL。简化后的代码如下所示:
Storage::disk('s3')->put('image.jpg', $file);
return Storage::disk('s3')->temporaryUrl('image.jpg');
我想为那条路线写一个测试。对于 Laravel,这通常很简单。我用 模拟存储Storage::fake('s3')
并用Storage::disk('s3')->assertExists('image.jpg')
.
假存储不支持Storage::temporaryUrl()
。如果尝试使用该方法,则会引发以下错误:
此驱动程序不支持创建临时 URL。
一个常见的工作是使用 Laravel 的低级模拟 API,如下所示:
Storage::shouldReceive('temporaryUrl')
->once()
->andReturn('http://examples.com/a-temporary-url');
在LaraCasts线程和关于.Storage::fake()
有什么方法可以结合这两种方法来测试两者兼而有之的路线吗?
我想避免重新实现Storage::fake()
. Storage::temporaryUrl()
另外,如果环境正在测试,我想避免在生产代码中添加检查以不调用。后者是上面已经提到的 LaraCast 线程中提出的另一个工作循环。