Laravel 5.4
Awesome Laravel
- Awesome Laravel (Chirag Gude)
Prologue
- Release Notes
- Upgrade Guide
Getting Started
- Installation
- Configuration
- Directory Structure
- Laravel Homestead
- valet
Architecture Concepts
- Request Lifecycle
- Service Container
- Service Providers
- Facades
The Basics
- Routing
- Errors & Logging
- Middleware
- CSRF Protection
- Controllers
- HTTP Requests
- HTTP Responses
- Views
- HTTP Session
- Validation
Frontend
- Blade Templates
- Localization
- JavaScript & CSS Scaffolding
- Compiling Assets (Laravel Mix)
Security
- Authentication
- API Authentication (Passport)
- Authorization
- Encryption
- Hashing
- Resetting Passwords
Digging Deeper
- Artisan Console
- Queues
- Package Development
- Task Scheduling
- Broadcasting
- Cache
- Collections
- Events
- File Storage
- helpers
- Notifications
Database
- Database Getting Started
- Database Query Builder
- Database Pagination
- Database Migrations
- Database Seeding
- Redis
Eloquent ORM
- Eloquent Getting Started
- Eloquent Relationships
- Eloquent Collections
- Eloquent Mutators
- Eloquent Serialization
Testing
- Testing Getting Started
- HTTP Tests
- Browser Tests (Laravel Dusk)
- Database Testing
- Mocking
- redirect
Official Packages
- Laravel Cashier
- Envoy Task Runner
- Laravel Scout
HTTP Tests
Introduction
Laravel provides a very fluent API for making HTTP requests to your application and examining the output. For example, take a look at the test defined below:
The get
method makes a GET
request into the application, while the assertStatus
method asserts that the returned response should have the given HTTP status code. In addition to this simple assertion, Laravel also contains a variety of assertions for inspecting the response headers, content, JSON structure, and more.
Session / Authentication
Laravel provides several helpers for working with the session during HTTP testing. First, you may set the session data to a given array using the withSession
method. This is useful for loading the session with data before issuing a request to your application:
Of course, one common use of the session is for maintaining state for the authenticated user. The actingAs
helper method provides a simple way to authenticate a given user as the current user. For example, we may use a model factory to generate and authenticate a user:
You may also specify which guard should be used to authenticate the given user by passing the guard name as the second argument to the actingAs
method:
Testing JSON APIs
Laravel also provides several helpers for testing JSON APIs and their responses. For example, the json
, get
, post
, put
, patch
, and delete
methods may be used to issue requests with various HTTP verbs. You may also easily pass data and headers to these methods. To get started, let’s write a test to make a POST
request to /user
and assert that the expected data was returned:
{tip} The
assertJson
method converts the response to an array and utilizesPHPUnit::assertArraySubset
to verify that the given array exists within the JSON response returned by the application. So, if there are other properties in the JSON response, this test will still pass as long as the given fragment is present.
Verifying Exact Match
If you would like to verify that the given array is an exact match for the JSON returned by the application, you should use the assertExactJson
method:
Testing File Uploads
The Illuminate\Http\UploadedFile
class provides a fake
method which may be used to generate dummy files or images for testing. This, combined with the Storage
facade’s fake
method greatly simplifies the testing of file uploads. For example, you may combine these two features to easily test an avatar upload form:
Fake File Customization
When creating files using the fake
method, you may specify the width, height, and size of the image in order to better test your validation rules:
In addition to creating images, you may create files of any other type using the create
method:
Available Assertions
Laravel provides a variety of custom assertion methods for your PHPUnit tests. These assertions may be accessed on the response that is returned from the json
, get
, post
, put
, and delete
test methods:
Method | Description |
---|---|
$response->assertStatus($code); |
Assert that the response has a given code. |
$response->assertRedirect($uri); |
Assert that the response is a redirect to a given URI. |
$response->assertHeader($headerName, $value = null); |
Assert that the given header is present on the response. |
$response->assertCookie($cookieName, $value = null); |
Assert that the response contains the given cookie. |
$response->assertPlainCookie($cookieName, $value = null); |
Assert that the response contains the given cookie (unencrypted). |
$response->assertSessionHas($key, $value = null); |
Assert that the session contains the given piece of data. |
$response->assertSessionHasErrors(array $keys); |
Assert that the session contains an error for the given field. |
$response->assertSessionMissing($key); |
Assert that the session does not contain the given key. |
$response->assertJson(array $data); |
Assert that the response contains the given JSON data. |
$response->assertJsonFragment(array $data); |
Assert that the response contains the given JSON fragment. |
$response->assertJsonMissing(array $data); |
Assert that the response does not contain the given JSON fragment. |
$response->assertExactJson(array $data); |
Assert that the response contains an exact match of the given JSON data. |
$response->assertJsonStructure(array $structure); |
Assert that the response has a given JSON structure. |
$response->assertViewHas($key, $value = null); |
Assert that the response view was given a piece of data. |