Метод probibitdestructivecommands () нет в базовом прокси -классе (Databasemanager) , он находится на фактическом классе фасада.
Это затрудняло для меня. Я потратил слишком долго, пытаясь решить это; Чтобы найти решение, которое позволит утверждать, что метод фасада называется. >
Код: Выделить всё
test('Invokes DB::prohibitDestructiveCommands in production', function ()
{
$this->app->detectEnvironment(fn() => 'production');
$mock = mock('overload:Illuminate\Support\Facades\DB');
$mock->shouldReceive('getFacadeRoot')
->once()
->andReturn(new DB);
$mock->shouldReceive('prohibitDestructiveCommands')
->once()
->with(true);
$this->provider->boot();
$mock->shouldHaveReceived('prohibitDestructiveCommands');
}
);
Код: Выделить всё
Mockery\Exception\RuntimeException:
Could not load mock Illuminate\Support\Facades\DB,
class already exists
at vendor/mockery/mockery/library/Mockery/Container.php:401
at vendor/mockery/mockery/library/Mockery.php:681
at vendor/mockery/mockery/library/helpers.php:40
Примечание: я знаю, что я мог бы обернуть метод, например, и издеваться над поставщиком, чтобы утверждать призыв этого метода, однако это не прекрасное решение для обеспечения соблюдения поведения через тесты, как призыв к Db :: probibitdestructivecommands (app ()-> isproduction ()) может быть удален или изменен в разработке в более позднее время из метода обертывания и тестов не будет забрать структурные изменения.
Я также знаю, что я могу проверить результат призывы к запрещенным командам, но это модульные тесты, и не должно быть подобным поведению по перекрестному тестированию, только структура класс.
Подробнее здесь: https://stackoverflow.com/questions/794 ... xied-class
Мобильная версия