Laravel is built with testing in mind. In fact, support for testing with PHPUnit is included out of the box and a phpunit.xml
file is already set up for your application. The framework also ships with convenient helper methods that allow you to expressively test your applications.
By default, your application's tests
directory contains two directories: Feature
and Unit
. Unit tests are tests that focus on a very small, isolated portion of your code. In fact, most unit tests probably focus on a single method. Tests within your "Unit" test directory do not boot your Laravel application and therefore are unable to access your application's database or other framework services.
Feature tests may test a larger portion of your code, including how several objects interact with each other or even a full HTTP request to a JSON endpoint. Generally, most of your tests should be feature tests. These types of tests provide the most confidence that your system as a whole is functioning as intended.
An ExampleTest.php
file is provided in both the Feature
and Unit
test directories. After installing a new Laravel application, execute the vendor/bin/phpunit
or php artisan test
commands to run your tests.
When running tests via vendor/bin/phpunit
, Laravel will automatically set the configuration environment to testing
because of the environment variables defined in the phpunit.xml
file. Laravel also automatically configures the session and cache to the array
driver while testing, meaning no session or cache data will be persisted while testing.
You are free to define other testing environment configuration values as necessary. The testing
environment variables may be configured in your application's phpunit.xml
file, but make sure to clear your configuration cache using the config:clear
Artisan command before running your tests!
In addition, you may create a .env.testing
file in the root of your project. This file will be used instead of the .env
file when running PHPUnit tests or executing Artisan commands with the --env=testing
option.
To create a new test case, use the make:test
Artisan command. By default, tests will be placed in the tests/Feature
directory:
php artisan make:test UserTest
If you would like to create a test within the tests/Unit
directory, you may use the --unit
option when executing the make:test
command:
php artisan make:test UserTest --unit
{tip} Test stubs may be customized using stub publishing
Once the test has been generated, you may define test methods as you normally would using PHPUnit. To run your tests, execute the vendor/bin/phpunit
or php artisan test
command from your terminal:
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
{note} If you define your own
setUp
/tearDown
methods within a test class, be sure to call the respectiveparent::setUp()
/parent::tearDown()
methods on the parent class.
In addition to the phpunit
command, you may use the test
Artisan command to run your tests. The Artisan test runner provides verbose test reports in order to ease development and debugging:
php artisan test
Any arguments that can be passed to the phpunit
command may also be passed to the Artisan test
command:
php artisan test --testsuite=Feature --stop-on-failure