dees040 / festing
Fasten up your unit tests in Laravel by more than 100%
Installs: 4 254
Dependents: 0
Suggesters: 0
Security: 0
Stars: 36
Watchers: 5
Forks: 0
Open Issues: 0
Requires
- illuminate/container: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*
- illuminate/support: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*
Requires (Dev)
- orchestra/testbench: 3.5.*|3.6.*|3.7.*
- phpunit/phpunit: 6.0.*|7.0.*|8.0.*|9.0.*
README
Festing is a very very great name made by combining the words fast and testing. Because that is what this package is for. Faster tests in Laravel. The package is inspired by a great article from Nate Denlinger.
Before 'Festing':
After 'Festing':
Installation
Installation and setup time is estimated to be around 5 minutes in existing Laravel projects and 2 minutes in new projects. Install this package via composer.
composer require --dev dees040/festing
If you're using Laravel >= 5.5 this package will automatically be added to your providers list. If using a lower version, add the service provider to the providers
array in config/app.php
.
Dees040\Festing\ServiceProvider::class,
You're now ready for setup.
The package comes with a small config file. The default config should be good in most use cases. However, feel free to change it. To publish the config file run the following command
php artisan vendor:publish --provider="Dees040\Festing\ServiceProvider" --tag="config"
Setup
First you should update the database.php
config file. We should add a connection specifically for testing. You can use the following array.
'testing' => [ 'driver' => 'sqlite', 'database' => database_path('testing.sqlite'), 'prefix' => '', ],
In the package config you can specify which connection to use while testing. By default it will use the testing
connection, which we've just added to the connections
array. You should also add or update this in <php>
tag located in the phpunit.xml
file.
<env name="DB_CONNECTION" value="testing"/>
Because Laravel don't have an option to boot your testing traits like the model traits we need to add a little bit of functionality in our tests/TestCase.php
file. If you haven't overwritten the setUpTraits()
method yet, you can add this to the TestCase.php
.
use Dees040\Festing\FestTheDatabase; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication, FestTheDatabase; /** * Boot the testing helper traits. * * @return array */ protected function setUpTraits() { $uses = parent::setUpTraits(); if (isset($uses[\Dees040\Festing\ShouldFest::class])) { $this->runFester(); } return $uses; }
If you already have overwritten the setUpTraits()
method just add the if statement to the method body. Also your TestCase.php
should use the FestTheDatabase
trait. In the examples directory you can see an example TestCase.php
and unit test.
In test cases
To actually execute the database refresher you need to use ShouldFest
trait in your test cases. This traits is used like the ShouldQueue
interface, it only executes the code if it's detected. It also replaces the RefreshDatabase
trait from Laravel.
<?php namespace Tests\Unit; use Tests\TestCase; use Dees040\Festing\ShouldFest; class ExampleTest extends TestCase { use ShouldFest; /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
Command
The package come with a command (make:fest
) which is the same as php artisan make:test
. The only difference is that it uses the ShouldFest
trait instead of the default RefreshDatabase
trait provided by Laravel.
Config
Check the config file for descriptions about all the config.
Cached data
Before we cache the data to make the tests significantly faster we run a list of artisan commands. Be default we run php artisan migrate
. But if you'd like to change this or want to run more commands (i.e. php artisan db:seed
) you can change the commands
array config value.