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
HTTP Test Assertions in Laravel
📖 Scenario: You are building a simple Laravel application that has a route returning a welcome message. You want to write tests to check if the HTTP responses are correct.
🎯 Goal: Write HTTP test assertions in Laravel to verify the response status, content, and JSON structure of a route.
📋 What You'll Learn
Create a test method that sends a GET request to the /welcome route
Assert that the response status is 200
Assert that the response contains the text Welcome to Laravel
Assert that the response JSON has a key message with value Welcome to Laravel
💡 Why This Matters
🌍 Real World
Testing HTTP responses ensures your web routes return the correct data and status, preventing bugs before deployment.
💼 Career
Writing HTTP test assertions is a key skill for Laravel developers to maintain reliable and robust web applications.
Progress0 / 4 steps
1
Create a test method with a GET request
Create a test method called test_welcome_route_returns_success inside a Laravel test class. Inside it, send a GET request to the /welcome route using $response = $this->get('/welcome');
Laravel
Hint
Use $this->get('/welcome') to send a GET request inside your test method.
2
Assert the response status is 200
Add an assertion to check that the response status is 200 using $response->assertStatus(200); inside the test_welcome_route_returns_success method.
Laravel
Hint
Use assertStatus(200) on the response object to check the HTTP status.
3
Assert the response contains specific text
Add an assertion to check that the response contains the text Welcome to Laravel using $response->assertSee('Welcome to Laravel'); inside the test_welcome_route_returns_success method.
Laravel
Hint
Use assertSee('Welcome to Laravel') to check if the response contains the text.
4
Assert the response JSON has a message key
Add an assertion to check that the response JSON has a key message with value Welcome to Laravel using $response->assertJson(['message' => 'Welcome to Laravel']); inside the test_welcome_route_returns_success method.
Laravel
Hint
Use assertJson(['message' => 'Welcome to Laravel']) to check the JSON response content.
Practice
(1/5)
1. Which Laravel HTTP test assertion checks if the response status code is 200?
easy
A. $response->assertStatus(200);
B. $response->assertRedirect('/home');
C. $response->assertSee('Welcome');
D. $response->assertJson(['success' => true]);
Solution
Step 1: Understand the purpose of assertStatus
This method checks the HTTP status code returned by the response.
Step 2: Match the status code 200 with the assertion
$response->assertStatus(200); confirms the response was successful (OK).
Final Answer:
$response->assertStatus(200); -> Option A
Quick Check:
Check status code = assertStatus(200) [OK]
Hint: Use assertStatus(200) to check for OK response quickly [OK]
Common Mistakes:
Confusing assertRedirect with assertStatus
Using assertSee to check status code
Expecting assertJson to check status
2. Which of the following is the correct syntax to assert a redirect to the URL '/dashboard' in a Laravel HTTP test?
easy
A. $response->assertLocation('/dashboard', 200);
B. $response->redirect('/dashboard');
C. $response->assertRedirect('/dashboard');
D. $response->assertStatus(302, '/dashboard');
Solution
Step 1: Identify the correct assertion method for redirects
Laravel uses assertRedirect() to check if the response redirects to a given URL.
Step 2: Confirm the syntax matches the method signature
The correct syntax is $response->assertRedirect('/dashboard'); which asserts a redirect to '/dashboard'.
Final Answer:
$response->assertRedirect('/dashboard'); -> Option C
Quick Check:
Redirect assertion = assertRedirect(url) [OK]
Hint: Use assertRedirect('url') to check redirects in tests [OK]
Why does this test fail even though the redirect is correct?
medium
A. Because the post method should be get for redirects.
B. Because assertStatus(200) conflicts with the redirect status code 302.
C. Because the URL '/dashboard' is incorrect.
D. Because assertRedirect must come after assertStatus.
Solution
Step 1: Understand HTTP redirect status codes
Redirect responses usually have status code 302, not 200.
Step 2: Check the conflict between assertions
assertRedirect('/dashboard') expects a 302 status, but assertStatus(200) expects 200, causing failure.
Final Answer:
Because assertStatus(200) conflicts with the redirect status code 302. -> Option B
Quick Check:
Redirect status is 302, not 200 [OK]
Hint: Redirects use 302 status; don't assert 200 with assertRedirect [OK]
Common Mistakes:
Mixing HTTP methods for redirect tests
Assuming assertRedirect changes status code
Thinking assertion order affects results
5. You want to test that a JSON API response contains a key 'status' with value 'success' and also returns HTTP status 201. Which assertion combination is correct?
hard
A. $response->assertStatus(201)->assertJson(['status' => 'success']);
B. $response->assertJson(['status' => 'success'])->assertRedirect(201);
C. $response->assertStatus(200)->assertJson(['status' => 'success']);
D. $response->assertSee('success')->assertStatus(201);
Solution
Step 1: Identify the correct status code assertion
HTTP 201 means 'Created', so assertStatus(201) is needed.
Step 2: Use assertJson to check JSON content
assertJson(['status' => 'success']) verifies the JSON key and value.
Step 3: Combine assertions correctly
Chaining assertStatus(201) and assertJson([...]) is valid and checks both conditions.
Final Answer:
$response->assertStatus(201)->assertJson(['status' => 'success']); -> Option A