存储没有在测试中构建正确的文件url ?



我正在为我的应用程序编写测试,并努力理解为什么Storage类没有构建预期的文件url。

我有这个测试失败断言预期的url等于构建的一个,所以我把if在我的代码和dd()的东西出来理解,这就是结果:

IF in my test

if('http://testurl/storage/path/to/file.test' != 
Storage::disk('default_disk')->url('path/to/file.test')){
dd(
config('filesystems.disks.default_disk'),
Storage::disk('default_disk')->url('path/to/file.test'),
);
}

输出
> php vendor/phpunit/phpunit/phpunit
PHPUnit 9.5.2 by Sebastian Bergmann and contributors.
Runtime:       PHP 7.4.3
Configuration: C:UserssilviDesktopRawFilephpunit.xml
array:3 [
"driver" => "local"
"root" => "root/"
"url" => "http://testurl/storage"
]
"/storage/path/to/file.test"
Script php vendor/phpunit/phpunit/phpunit handling the test event returned with error code 1

考虑所以在我的测试中,磁盘配置是OK的,但是Storage类构建了错误的url,就像它忽略了url配置部分。

不要认为这很重要,但(显然)存储是假的,在setUp()方法中使用Storage::fake('default_disk');

Laravel

我正在为Laravel包编写测试,并使用"orchestra/testbench": "^6.2"作为开发依赖项,因此根据他们的文档,它带来了Laravel 6应用程序骨架。

更新我试着删除Storage::fake('default_disk');和测试通过,有Storage正确使用我的配置。
正如gbalduzzi所说,如果存储是假的,它会忽略我配置中的任何内容。

当您使用fake()创建磁盘时,Laravel将不再考虑您从通常的文件config/filesystems.php中进行配置。

它将创建一个自定义的假磁盘。

要解决这个问题,您应该使用实际的磁盘,而不是使用fake()创建它。但这并不理想,因为运行测试实际上会将文件添加到选定的存储中。

事实是,您不应该测试Storage facade是否构建了正确的url。你的测试应该集中在你自己写的代码上。正确地测试它们的接口/方法/外观是一项很困难的工作。