存储未在测试中构建正确的文件 url?
Storage not building the right file url in test?
我正在为我的应用程序编写测试并努力理解 Storage
class 没有构建预期的文件 url.
我正在进行这个测试,但无法断言预期的 url 等于构建的,所以我在我的代码中放了一个 if
和 dd()
东西来理解,这就是结果:
如果在我的测试中
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 的工作。
我正在为我的应用程序编写测试并努力理解 Storage
class 没有构建预期的文件 url.
我正在进行这个测试,但无法断言预期的 url 等于构建的,所以我在我的代码中放了一个 if
和 dd()
东西来理解,这就是结果:
如果在我的测试中
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 的工作。