29

GitHub - dees040/festing: Fasten up your unit tests in Laravel by more than 100%

 5 years ago
source link: https://github.com/dees040/festing
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

Fast Laravel Testing

Latest Stable Version Total Downloads Build status

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':

Before fast database tests

After 'Festing':

After fast database tests

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.

/**
 * 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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK