← Back to Course

Mocking and Stubbing in Tests

Some dependencies — payment gateways, external APIs, email providers — shouldn't actually run during a test. Mocking and stubbing let a test replace these dependencies with controlled, predictable stand-ins.

Mocking a Facade

Mail::fake();

// ... code that sends mail ...

Mail::assertSent(WelcomeEmail::class);

Mail::fake() swaps the real mailer for a fake one that records what would have been sent, without actually sending anything.

Mocking a Class Dependency

$mock = $this->mock(PaymentGateway::class, function ($mock) {
    $mock->shouldReceive('charge')->once()->andReturn(true);
});

Stubs vs Mocks

ConceptPurpose
StubReturns canned data, doesn't verify it was called
MockVerifies specific methods were called with specific arguments

Mocking removes real dependencies from a test, but tests still need realistic data to work with — which is exactly what model factories are built for.

Ready to master Laravel Training Course?

Join Uncodemy's hands-on Laravel program and build real, production-ready applications.

Explore Course