Bird
Raised Fist0
Laravelframework~20 mins

Feature tests in Laravel - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Laravel Feature Test Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What does this Laravel feature test do?
Consider this Laravel feature test code. What is the expected behavior when this test runs?
Laravel
public function test_homepage_shows_welcome_message()
{
    $response = $this->get('/');
    $response->assertStatus(200);
    $response->assertSee('Welcome to our site');
}
AIt checks that the homepage URL returns a 200 status and contains the text 'Welcome to our site'.
BIt tests that the homepage redirects to another page with a welcome message.
CIt ensures the homepage returns JSON data containing a welcome message.
DIt verifies that the homepage returns a 404 error with a welcome message.
Attempts:
2 left
💡 Hint
Look at the methods get(), assertStatus(), and assertSee() to understand what is tested.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this Laravel feature test
Which option correctly fixes the syntax error in this test method?
Laravel
public function test_user_can_login()
{
    $response = $this->post('/login', [
        'email' => 'user@example.com',
        'password' => 'secret'
    ]);
    $response->assertRedirect('/dashboard');
}
AChange post() to get() to fix the syntax error.
BRemove the closing brace '}' to fix the syntax error.
CAdd a semicolon after assertRedirect('/dashboard') to fix the syntax error.
DReplace the array with a JSON string to fix the syntax error.
Attempts:
2 left
💡 Hint
Check the end of the assertRedirect line for missing punctuation.
❓ state_output
advanced
2:00remaining
What is the state of the database after this feature test runs?
Given this Laravel feature test that creates a user, what will be the number of users in the database after the test completes?
Laravel
public function test_user_creation()
{
    $this->post('/users', [
        'name' => 'Alice',
        'email' => 'alice@example.com',
        'password' => 'password123'
    ]);

    $this->assertDatabaseHas('users', ['email' => 'alice@example.com']);
}
AThe test will fail because the password is not hashed.
BThere will be multiple users with the same email due to repeated test runs.
CThere will be exactly one user with email 'alice@example.com' in the users table.
DThere will be no users in the database because tests do not persist data.
Attempts:
2 left
💡 Hint
Laravel feature tests use database transactions by default to isolate tests.
🔧 Debug
advanced
2:00remaining
Why does this Laravel feature test fail?
This test is supposed to check that a guest user is redirected to login when accessing /dashboard. Why does it fail?
Laravel
public function test_guest_redirected_to_login()
{
    $response = $this->get('/dashboard');
    $response->assertStatus(200);
    $response->assertSee('Login');
}
AThe test fails because the /dashboard route does not exist.
BThe test expects status 200 but the route redirects with status 302, causing failure.
CThe test fails because the response does not contain the word 'Login'.
DThe test fails because the get() method requires authentication.
Attempts:
2 left
💡 Hint
Check the expected HTTP status code for redirects.
🧠 Conceptual
expert
2:00remaining
Which option best describes Laravel feature tests?
Choose the statement that correctly explains the purpose and behavior of Laravel feature tests.
AFeature tests simulate user interactions with the application through HTTP requests to verify end-to-end behavior.
BFeature tests only check individual methods in models without involving HTTP requests.
CFeature tests are used to test database migrations and schema changes only.
DFeature tests run in production to monitor live user activity.
Attempts:
2 left
💡 Hint
Think about what 'feature' means in testing Laravel apps.

Practice

(1/5)
1. What is the main purpose of Feature tests in Laravel?
easy
A. To test how the application behaves from the user's perspective
B. To check the syntax of PHP code
C. To test database migrations only
D. To optimize application performance

Solution

  1. Step 1: Understand the role of feature tests

    Feature tests simulate user actions and check the app's responses to ensure it works as expected.
  2. Step 2: Compare with other test types

    Unlike unit tests or migration tests, feature tests focus on user experience and request handling.
  3. Final Answer:

    To test how the application behaves from the user's perspective -> Option A
  4. Quick Check:

    Feature tests = user behavior testing [OK]
Hint: Feature tests simulate user requests and responses [OK]
Common Mistakes:
  • Confusing feature tests with unit tests
  • Thinking feature tests only check database
  • Assuming feature tests optimize performance
2. Which of the following is the correct way to start a feature test method in Laravel?
easy
A. public testUserCanLogin()
B. function testUserCanLogin()
C. public function testUserCanLogin()
D. def testUserCanLogin()

Solution

  1. Step 1: Recall Laravel test method syntax

    Laravel feature test methods must be public and start with 'test' or have the @test annotation.
  2. Step 2: Identify correct PHP method declaration

    Only 'public function testUserCanLogin()' is valid PHP syntax for a test method in Laravel.
  3. Final Answer:

    public function testUserCanLogin() -> Option C
  4. Quick Check:

    Test methods are public functions [OK]
Hint: Test methods must be public functions starting with 'test' [OK]
Common Mistakes:
  • Omitting 'public' keyword
  • Using wrong function declaration syntax
  • Using Python style 'def' keyword
3. Given this Laravel feature test code:
public function testHomePageReturnsOk()
{
    $response = $this->get('/');
    $response->assertStatus(200);
}

What does this test check?
medium
A. The home page returns a 404 error
B. The home page returns a 200 OK status
C. The home page redirects to login
D. The home page returns JSON data

Solution

  1. Step 1: Analyze the HTTP request in the test

    The test sends a GET request to '/' (home page).
  2. Step 2: Check the assertion

    The test asserts the response status is 200, meaning OK.
  3. Final Answer:

    The home page returns a 200 OK status -> Option B
  4. Quick Check:

    assertStatus(200) means success [OK]
Hint: assertStatus(200) means page loaded successfully [OK]
Common Mistakes:
  • Confusing 200 with 404 or redirect codes
  • Assuming JSON response without checking
  • Misreading the URL path
4. What is wrong with this Laravel feature test code?
public function testUserRegistration()
{
    $response = $this->post('/register', [
        'email' => 'user@example.com',
        'password' => 'secret',
    ]);
    $response->assertRedirect('/home');
}
medium
A. Missing CSRF token in the post request
B. Password should be hashed before sending
C. Password field should be 'password_confirmation' instead of 'password'
D. The test method is missing the 'public' keyword

Solution

  1. Step 1: Understand Laravel's CSRF protection

    Laravel requires a CSRF token for POST requests to prevent attacks.
  2. Step 2: Check test request handling

    Feature tests use the 'web' middleware group by default, which includes CSRF protection. The $this->post() method does not automatically include a CSRF token, so the test will fail unless the token is provided or middleware is disabled.
  3. Step 3: Identify the actual issue

    Since the test does not disable middleware, missing CSRF token causes failure.
  4. Final Answer:

    Missing CSRF token in the post request -> Option A
  5. Quick Check:

    POST requests need CSRF token unless middleware disabled [OK]
Hint: Remember CSRF token is needed for POST requests [OK]
Common Mistakes:
  • Assuming password must be hashed in test input
  • Confusing password and password_confirmation fields
  • Ignoring middleware effects on tests
5. You want to test a feature where a logged-in user can update their profile. Which sequence correctly sets up the test in Laravel feature tests?
hard
A. Assert redirect -> Create user -> Send POST request -> Act as user
B. Send POST request to update route -> Create user -> Assert redirect -> Act as user
C. Act as user -> Assert redirect -> Create user -> Send POST request
D. Create user -> Act as user -> Send POST request to update route -> Assert redirect

Solution

  1. Step 1: Create a user to simulate logged-in state

    First, create a user instance in the database for authentication.
  2. Step 2: Use actingAs() to simulate logged-in user

    Use $this->actingAs($user) to run requests as that user.
  3. Step 3: Send POST request to update profile route

    Send the update request while acting as the user.
  4. Step 4: Assert the response redirects as expected

    Check that the response redirects to the correct page after update.
  5. Final Answer:

    Create user -> Act as user -> Send POST request to update route -> Assert redirect -> Option D
  6. Quick Check:

    Setup user then act as user before request [OK]
Hint: Create user first, then act as user before request [OK]
Common Mistakes:
  • Sending request before acting as user
  • Not creating user before acting as user
  • Asserting redirect before sending request