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
| Concept | Purpose |
|---|---|
| Stub | Returns canned data, doesn't verify it was called |
| Mock | Verifies 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.
