dennislindsey/artisan-test-helpers

This package is abandoned and no longer maintained. No replacement package was suggested.
There is no license information available for the latest version (dev-master) of this package.

PHP Artisan Test Helpers

dev-master 2017-01-03 18:39 UTC

This package is not auto-updated.

Last update: 2020-01-24 16:27:41 UTC


README

This package adds 3 new artisan commands to your Laravel project to help make your TDD workflow a little easier:

php artisan make:featuretest {name}

php artisan make:unittest {name}

php artisan make:factory {class}

A Laravel service provider is also included. This provider will generate directories named /stubs/ in your project's /test/ and database directories, allowing you to customize the files that are generated by these commands.

Inspired by Adam Wathan's "Test Driven Laravel" course https://adamwathan.me/test-driven-laravel/

Setup

To get started, add the package to your composer.json file, under require-dev:

"dennislindsey/artisan-test-helpers": "dev-master"

Once you've run a composer update, you need to register the Laravel service provider. You may add it to your /config/app.php:

'providers' => [
    ...
    DennisLindsey\ArtisanTestHelpers\Providers\ArtisanTestHelperServiceProvider::class,
],

...Or alternatively, I suggest adding the following code to your app/Providers/AppServiceProvider.php file, within the register() method:

public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\DennisLindsey\ArtisanTestHelpers\Providers\ArtisanTestHelperServiceProvider::class);
    }
    // ...
}

Make sure to publish the stubs directories

$ php artisan vendor:publish --provider="DennisLindsey\ArtisanTestHelpers\Providers\ArtisanTestHelperServiceProvider"

Usage

$ php artisan make:featuretest NameOfFeature

This will generate a file in your project's /tests/feature/ directory called NameOfFeatureTest.php

<?php
 
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
 
class NameOfFeatureTest extends TestCase
{
    // use DatabaseMigrations;
 
    protected function setUp()
    {
        parent::setUp();
         
        // Shared test setup code should be placed after parent::setUp()
    }
 
    /** @test */
    function testNameOfFeature()
    {
        // Arrange
 
        // Act
 
        // Assert
    }
}
$ php artisan make:unittest NameOfUnit

This will generate a file in your project's /tests/unit/ directory called NameOfUnitTest.php

<?php
 
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
 
class NameOfUnitTest extends TestCase
{
    // use DatabaseMigrations;
 
    protected function setUp()
    {
        parent::setUp();
        
        // Shared test setup code should be placed after parent::setUp()
    }
 
    /** @test */
    function testNameOfUnit()
    {
        // Arrange
 
        // Act
 
        // Assert
    }
}
$ php artisan make:factory User

This will generate a file in your project's /database/factories/ directory called UserFactory.php

<?php
 
$factory->define(App\User::class, function (Faker\Generator $faker) {
    // static $password;
 
    return [
        // 'name' => $faker->name,
        // 'email' => $faker->unique()->safeEmail,
        // 'password' => $password ?: $password = bcrypt('secret'),
        // 'remember_token' => str_random(10),
    ];
});
 
// $factory->state(App\User}::class, 'deleted', function ($faker) {
//     return [
//         'deleted_at' => date('Y-m-d H:i:s'),
//     ];
// });