Утверждая метод вызов на фасад, а не в базовом прокси -классеPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Утверждая метод вызов на фасад, а не в базовом прокси -классе

Сообщение Anonymous »

Я пытаюсь написать тесты, чтобы утверждать, что методы, вызванные в моем приложении, представлены и применяются методы. Однако у меня возникает проблема с DB :: ProbibitDestructiveCommands (app ()-> isproduction ()) вызов метода.
Метод 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»