Unit Testing
Contents
The Basics
Unit Testing allows you to test your code and verify that it is working correctly. In fact, many advocate that you should even write your tests before you write your code! Laravel provides beautiful integration with the popular PHPUnit testing library, making it easy to get started writing your tests. In fact, the Laravel framework itself has hundreds of unit tests!
Creating Test Classes
All of your application's tests live in the application/tests directory. In this directory, you will find a basic example.test.php file. Pop it open and look at the class it contains:
<?php class TestExample extends PHPUnit_Framework_TestCase { /** * Test that a given condition is met. * * @return void */ public function testSomethingIsTrue() { $this->assertTrue(true); } }
Take special note of the .test.php file suffix. This tells Laravel that it should include this class as a test case when running your test. Any files in the test directory that are not named with this suffix will not be considered a test case.
If you are writing tests for a bundle, just place them in a tests directory within the bundle. Laravel will take care of the rest!
For more information regarding creating test cases, check out the PHPUnit documentation.
Running Tests
To run your tests, you can use Laravel's Artisan command-line utility:
Running the application's tests via the Artisan CLI:
php artisan test
Running the unit tests for a bundle:
php artisan test bundle-name
Calling Controllers From Tests
Here's an example of how you can call your controllers from your tests:
Calling a controller from a test:
$response = Controller::call('home@index', $parameters);
Resolving an instance of a controller from a test:
$controller = Controller::resolve('application', 'home@index');
Note: The controller's action filters will still run when using Controller::call to execute controller actions.