提问人:Martijn Bastiaansen 提问时间:11/1/2023 更新时间:11/1/2023 访问量:32
Laravel Mockery phpunit 错误:无法解析的依赖项解析
Laravel Mockery phpunit error: Unresolvable dependency resolving
问:
测试相当新,但不能用门面进行测试才能正常工作。代码本身工作正常。只是希望测试也能正常工作:')
服务提供商:
<?php
class ServiceProvider extends AbstractServiceProvider implements DeferrableProvider
{
public function register(): void
{
$this->app->singleton(RedisHashManager::class, $this->hashManagerSingleton(...));
}
/**
* @return array<int, string>
*/
public function provides(): array
{
return [RedisHashManager::class];
}
private function hashManagerSingleton(Application $app): RedisHashManager
{
return new RedisHashManager($app->make(Factory::class), 'cache');
}
}
立面
<?php
class RedisHashCache extends Facade
{
protected static function getFacadeAccessor(): string
{
return RedisHashManager::class;
}
}
要测试的代码:
<?php
trait HashTrait
{
protected function getHashes(array $keys, array $fields): Collection
{
$keys = collect($keys)->mapWithKeys(static function ($key) use ($fields) {
return [$key => $fields];
})->toArray();
$fieldCount = count($fields);
return RedisHashCache::getHashes($keys)
->reject(static function ($data) use ($fieldCount) {
return count($data) !== $fieldCount;
});
}
}
测试本身:
<?php
class HashTraitTest extends TestCase
{
use HashTrait;
public function testGetHashes(): void
{
RedisHashCache::shouldReceive('getHashes')
->once();
$this->getHashes(['canidae:canis:lupus:lycaon'], ['color', 'food']);
}
}
(我删除了命名空间和用途,它们在真实代码中)
当我运行测试时,我收到以下错误:Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #1 [ <required> string $connectionName ]] in class AbstractRedisManager
AbstractRedisManager 由 RedisHashManager 扩展,在构造中需要 2 个参数:一个 RedisFactory 作为第一个正确解析的参数,以及一个给出错误的简单字符串。
第二个参数没有默认值,当我设置默认值时,它工作正常。但我不知道这是否是我针对该问题提供的正确/唯一解决方案。
希望有人能帮助我?
答: 暂无答案
评论
singleton
RedisHashManager
'redisHash'
redisHash