Как остановить подделку событий (переключить подделку событий) в модульном тестировании Laravel
Я разрабатываю приложение Laravel и выполняю модульное тестирование. Теперь у меня есть небольшая проблема с фальшивым и не фейковым событием Laravel в модульном тесте. Я пытаюсь сделать что-то вроде этого.
public function test_something()
{
Event::fake();
//Do somethng
//Then I want to stop faking event here something like this
Event::stopFaking(); //maybe
}
Я думаю, что мой код не требует пояснений. Как я могу достичь чего-то подобного в Laravel?
2 ответа
https://laravel.com/docs/5.7/mocking
Если вы хотите подделать прослушиватели событий только для части вашего теста, вы можете использовать метод fakeFor:
$order = Event::fakeFor(function () {
$order = factory(Order::class)->create();
Event::assertDispatched(OrderCreated::class);
return $order;
});
// Events are dispatched as normal and observers will run ...
$order->update([...]);
Все внутри function() {}
будут фальсифицировать события. Все снаружи будет функционировать нормально.
Event::fake
Функция определена в Освещение \ Поддержка \ Фасады \ Событие.
Мы можем видеть, что есть fakeFor
метод, который подделывает его только во время выполнения метода обратного вызова, а затем восстанавливает исходное поведение. Вы можете использовать это так:
public function test_something()
{
Event::fakeFor(function () {
//Do somethng
});
}
Как разработчику Laravel, часто полезно читать исходный код, в этой среде есть много интересных фрагментов, которые не документированы!