我正在为我的应用程序编写测试,并努力理解为什么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。你的测试应该集中在你自己写的代码上。正确地测试它们的接口/方法/外观是一项很困难的工作。