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

Storage not building the right file url in test?

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

我正在进行这个测试,但无法断言预期的 url 等于构建的,所以我在我的代码中放了一个 ifdd() 东西来理解,这就是结果:

如果在我的测试中

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:\Users\silvi\Desktop\RawFile\phpunit.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

注意事项

所以在我的测试中磁盘配置没问题,但是 Storage class 构建错误 url 就像它忽略了 url 配置部分。

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

Laravel

我正在为一个 Laravel 包编写测试,并使用 "orchestra/testbench": "^6.2" 作为开发依赖,所以根据他们的 docs 它会产生一个 Laravel 6 应用程序框架.

更新

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

当您使用 fake() 创建磁盘时,Laravel 将不再考虑您从普通文件 config/filesystems.php.

进行的配置

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

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

事实是,您不应该测试 Storage facades 是否构建了正确的 url。您的测试应该关注您编写的代码。正确测试他们的 interfaces/methods/facades 是 laravel 的工作。