# Testing
We all love unit tests. It gives us that bit more confidence in what a code logic is actually doing. So it's reasonable to handle testing tracked events.
When writing tests that trigger events (this includes tests that fire app events that are indirectly tracked or model events being indirectly observed), you can fake the tracked events so they're not actually sent off to any registered channels.
Events::fake();
Now all tracked events are instead stubbed and can be unit tested.
Events::assertTrackedTimes(OrderPlaced::class, 2);
# Faking A Subset Of Events
You can fake tracked events for specific set of events using the fake
or fakeFor
method:
Events::fake([
OrderPlaced::class,
]);
event(new OrderPlaced($order));
Events::assertTracked(OrderPlaced::class);
# Scoped Fakes
You can use fakeFor
if you only want to fake tracked events for a portion of your test:
$order = Events::fakeFor(function () {
$order = factory(Order::class)->create();
event(new OrderPlaced($order));
Events::assertTracked(OrderPlaced::class);
return $order;
});