Bird
Raised Fist0
Laravelframework~5 mins

Mocking and faking in Laravel - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is mocking in Laravel testing?
Mocking is creating a fake version of a class or interface to simulate its behavior during tests without using the real implementation.
Click to reveal answer
intermediate
What is the difference between mocking and faking in Laravel?
Mocking simulates specific methods and their responses, while faking replaces entire services or classes with simple implementations for testing.
Click to reveal answer
beginner
How do you create a mock of a class in Laravel?
Use the `mock()` helper or `Mockery::mock()` to create a mock object that you can set expectations on for method calls.
Click to reveal answer
beginner
What is a Laravel fake and when would you use it?
A fake is a simple replacement for a service, like the Mail or Queue, used to test if actions were performed without sending real emails or jobs.
Click to reveal answer
beginner
Why is mocking useful in unit testing?
Mocking isolates the code being tested by replacing dependencies, so tests run faster and focus only on the code's logic.
Click to reveal answer
Which Laravel helper is commonly used to create a mock object?
Afake()
Bstub()
Csimulate()
Dmock()
What does a Laravel fake typically replace in tests?
AMiddleware
BEntire services like Mail or Queue
CRoutes
DDatabase connections
Why should you use mocking in unit tests?
ATo isolate the code and avoid real dependencies
BTo slow down tests
CTo test the database
DTo deploy the app
Which package does Laravel use internally for mocking?
AMockery
BPHPUnit Mock
CFaker
DGuzzle
What is the main benefit of faking a service in Laravel tests?
AChange the database schema
BMake the app slower
CAvoid performing real actions like sending emails
DAdd new routes
Explain how mocking helps in Laravel unit testing and give an example of when to use it.
Think about testing a class that calls an external API.
You got /3 concepts.
    Describe the difference between mocking and faking in Laravel and why each is useful.
    Consider testing mail sending vs. testing a method call.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of mocking and faking in Laravel testing?
      easy
      A. To automatically generate user interfaces
      B. To simulate external services without performing real actions
      C. To permanently store test data in the database
      D. To speed up the application in production

      Solution

      1. Step 1: Understand mocking and faking concept

        Mocking and faking are used to imitate external services or actions during tests without actually performing them.
      2. Step 2: Identify the purpose in Laravel testing

        Laravel uses mocking and faking to avoid real side effects like sending emails or making HTTP requests during tests.
      3. Final Answer:

        To simulate external services without performing real actions -> Option B
      4. Quick Check:

        Mocking = simulate services [OK]
      Hint: Mocking means faking external actions in tests [OK]
      Common Mistakes:
      • Thinking mocking speeds up production
      • Confusing mocking with real data storage
      • Assuming mocking creates UI automatically
      2. Which Laravel method correctly fakes sending emails in a test?
      easy
      A. Mail::fake();
      B. Mail::sendFake();
      C. Mail::mock();
      D. Mail::simulate();

      Solution

      1. Step 1: Recall Laravel's mail faking method

        Laravel provides the Mail::fake() method to fake email sending during tests.
      2. Step 2: Check method correctness

        Only Mail::fake() is the correct and existing method; others are invalid or do not exist.
      3. Final Answer:

        Mail::fake(); -> Option A
      4. Quick Check:

        Mail::fake() = correct syntax [OK]
      Hint: Use Mail::fake() to fake emails in Laravel tests [OK]
      Common Mistakes:
      • Using non-existent methods like Mail::sendFake()
      • Confusing mock() with fake()
      • Forgetting the parentheses ()
      3. What will the following Laravel test code output?
      use Illuminate\Support\Facades\Http;
      
      Http::fake();
      
      $response = Http::get('https://example.com/api');
      
      return $response->status();
      medium
      A. null
      B. 404
      C. 500
      D. 200

      Solution

      1. Step 1: Understand Http::fake() behavior

        Http::fake() fakes all HTTP requests and returns a default successful response with status 200.
      2. Step 2: Analyze the returned status code

        The $response->status() returns 200 because the fake response simulates success.
      3. Final Answer:

        200 -> Option D
      4. Quick Check:

        Http::fake() returns 200 status [OK]
      Hint: Http::fake() returns 200 status by default [OK]
      Common Mistakes:
      • Assuming fake returns 404 or error
      • Expecting null instead of response object
      • Confusing Http::fake() with real HTTP call
      4. Identify the error in this Laravel test code snippet:
      use Illuminate\Support\Facades\Storage;
      
      Storage::fake('local');
      
      Storage::put('file.txt', 'Hello');
      
      $this->assertTrue(Storage::exists('file.txt'));
      medium
      A. Storage::fake() must be called with 'public' disk, not 'local'
      B. Storage::exists() should be Storage::disk('local')->exists()
      C. No error, the code is correct
      D. Storage::put() cannot be used after Storage::fake()

      Solution

      1. Step 1: Understand Storage::fake() usage

        Storage::fake('local') fakes the 'local' disk, which is Laravel's default disk.
      2. Step 2: Check method calls for disk specification

        Storage::put() and Storage::exists() use the default disk ('local'), so they interact with the faked disk correctly. The assertion passes.
      3. Final Answer:

        No error, the code is correct -> Option C
      4. Quick Check:

        Default disk = 'local' [OK]
      Hint: Storage:: methods use default disk after Storage::fake('local') [OK]
      Common Mistakes:
      • Thinking disk must always be explicitly specified
      • Believing Storage::put() is disallowed after fake
      • Confusing required disk names
      5. You want to test that your Laravel app sends exactly one notification to a user without actually sending it. Which approach correctly achieves this?
      hard
      A. Use Notification::fake() and then assertNotificationSent()
      B. Use Notification::send() and check the database for records
      C. Use Notification::mock() and assertNothingSent()
      D. Use Notification::fake() and then assertNothingSent()

      Solution

      1. Step 1: Choose the correct faking method for notifications

        Notification::fake() prevents real notifications from sending and allows assertions.
      2. Step 2: Use the right assertion to check one notification sent

        assertNotificationSent() verifies that a notification was sent exactly once to the user.
      3. Final Answer:

        Use Notification::fake() and then assertNotificationSent() -> Option A
      4. Quick Check:

        Notification::fake() + assertNotificationSent() = test notifications [OK]
      Hint: Fake notifications, then assertNotificationSent() to check sends [OK]
      Common Mistakes:
      • Using assertNothingSent() when expecting a notification
      • Trying to check notifications via database records
      • Using non-existent Notification::mock() method