Stars: 150
Forks: 46
Pull Requests: 28
Issues: 25
Watchers: 6
Last Updated: 2022-12-03 03:57:48
Faster test-driven development for CRUD feature in Laravel project.
License: MIT License
Languages: PHP
Need faster TDD in Laravel project? This is a simple CRUD generator complete with automated testing suite.
For installation instructions and usage, please take a look at the official documentation.
This package contains artisan make:crud
commands to create a simple CRUD feature with test classes on our Laravel 5.5 (and later) application. This package is fairly simple, to boost test-driven development method on our laravel application.
With this package installed on local environment, we can use (e.g.) php artisan make:crud Vehicle
command to generate some files :
App\Models\Vehicle.php
eloquent modelxxx_create_vehicles_table.php
migration fileVehicleController.php
index.blade.php
and forms.blade.php
view file in resources/views/vehicles
directoryresources/lang/vehicle.php
lang fileVehicleFactory.php
model factory fileVehiclePolicy.php
model policy file in app/Policies
directoryManageVehiclesTest.php
feature test class in tests/Feature
directoryVehicleTest.php
unit test class in tests/Unit/Models
directoryVehiclePolicyTest.php
unit test class in tests/Unit/Policies
directoryIt will update some file :
routes/web.php
to add vehicles
resource routeapp/providers/AuthServiceProvider.php
to add Vehicle model Policy class in $policies
propertyIt will also create this file if it not exists :
resources/lang/app.php
lang file if it not existstests/BrowserKitTest.php
base Feature TestCase class if it not existsThe main purpose of this package is for faster Test-driven Development, it generates model CRUD scaffolds complete with Testing Classes which will use Laravel Browserkit Testing package and PHPUnit.
# Get the package
$ composer require luthfi/simple-crud-generator:^2.0
# Get the package
$ composer require luthfi/simple-crud-generator:^1.0
To use this package on laravel 5.5, we need to add the package (with browserkit) within require-dev
in composer.json
file, like so :
# Install required package for laravel/browser-kit-testing
$ composer require symfony/css-selector:^3.0
# Get the package
$ composer require luthfi/simple-crud-generator 1.2.* --dev
The package will auto-discovered.
Just type in terminal $ php artisan make:crud ModelName
command, it will create simple Laravel CRUD files of given model name completed with tests.
For example we want to create CRUD for 'App\Models\Vehicle' model.
$ php artisan make:crud-simple Vehicle
Vehicle resource route generated on routes/web.php.
Vehicle model generated.
Vehicle table migration generated.
VehicleController generated.
Vehicle index view file generated.
Vehicle form view file generated.
lang/app.php generated.
vehicle lang files generated.
Vehicle model factory generated.
Vehicle model policy generated.
AuthServiceProvider class has been updated.
BrowserKitTest generated.
ManageVehiclesTest generated.
VehicleTest (model) generated.
VehiclePolicyTest (model policy) generated.
CRUD files generated successfully!
Make sure we have set database credential on .env
file, then :
$ php artisan migrate
$ php artisan serve
Then visit our application url: http://localhost:8000/vehicles
.
In this example, we are using the laravel installer package to install new laravel project.
# This is example commands for Ubuntu users.
$ laravel new project-directory
$ cd project-directory
$ composer require laravel/ui
$ php artisan ui bootstrap --auth
$ npm install && npm run dev # Might need to run twice, minimum requirement: NodeJS v12.x
$ vim .env # Edit your .env file to update database configuration
# Install the package
$ composer require luthfi/simple-crud-generator:^2.0
# I really suggest "git commit" your project right before you run the make:crud command
$ php artisan make:crud Vehicle # Model name in singular
$ php artisan migrate
$ php artisan serve
# Visit your route http://127.0.0.1:8000
# Register as a new user
# Visit your route http://127.0.0.1:8000/vehicles
# Run the unit tests
$ vim phpunit.xml # Remove comments on the DB_CONNECTION and DB_DATABASE lines
$ vendor/bin/phpunit
# Create Full CRUD feature with tests
$ php artisan make:crud ModelName
# Create Full CRUD feature with tests and Bootstrap 3 views
$ php artisan make:crud ModelName --bs3
# Create Simple CRUD feature with tests
$ php artisan make:crud-simple ModelName
# Create Simple CRUD feature with tests and Bootstrap 3 views
$ php artisan make:crud-simple ModelName --bs3
# Create API CRUD feature with tests
$ php artisan make:crud-api ModelName
The Model and table will only have 2 pre-definded attributes or columns : title and description on each generated model and database table. You can continue working on other column on the table.
The generated view files use Bootstrap 4 by default (for Laravel 5.6 and later).
We can also generates views that use Bootstrap 3 with --bs3
command option, eg for Laravel version 5.5.
If we want to generate API Controller with feature tests, we use following command :
$ php artisan make:crud-api Vehicle
By default, we use Laravel Token Based Authentication, so we need to update our user model.
api_token
column on our users_table_migration.api_token
as fillable property on User model.api_token
field on our UserFactory.The generated API is a REST API, using GET and POST verbs, with a URI of /api/modelname
.
Example code for calling the generated API, using Guzzle:
// Read data a specific Vehicle record...
$uri = 'http://your-domain.com/api/vehicles/'.$vehicleID;
$headers = ['Authorization' => 'Bearer '.$apiToken];
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', $uri, ['headers' => $headers]);
// Create a new Vehicle record...
$uri = 'http://your-domain.com/api/vehicles';
$headers = ['Authorization' => 'Bearer '.$apiToken];
$payload = json_encode([
'title' => 'Vehicle Name 1',
'description' => 'Vehicle Description 1',
]);
$client = new \GuzzleHttp\Client();
$res = $client->request('POST', $uri, ['body' => $payload, 'headers' => $headers]);
The generated functional tests will give you examples of how to adapt this code for other call types.
You can configure your own by publishing the config file:
$ php artisan vendor:publish --provider="Luthfi\CrudGenerator\ServiceProvider" --tag=config
That will generate config/simple-crud.php
file.
By default, this package have some configuration:
<?php
return [
// The master view layout that generated views will extends
'default_layout_view' => 'layouts.app',
// The base test case class path for generated testing classes
'base_test_path' => 'tests/BrowserKitTest.php',
// The base test class full name
'base_test_class' => 'Tests\BrowserKitTest',
];
Stub files is the templates which we use to generate the code for each model classes and files. We can customize the stub files as we needed by publishing them to our project directory.
$ php artisan vendor:publish --provider="Luthfi\CrudGenerator\ServiceProvider" --tag=stubs
That will generate stub files on stubs/simple-crud
directory. Now we can change some stub files based on our project needs.
resources/views/layouts/app.blade.php
view file, simply create one with php artisan make:auth
command. You can change this configuration via the config/simple-crud.php
file.Visit your application in new resource route : http://127.0.0.1:8000/vehicles
Next, let us try the generated testing suite. To use the generated testing classes, we can set the database environment using in-memory database SQLite. Open phpunit.xml
. Add two lines below on the env
:
<phpunit>
<!-- ..... -->
<php>
<!-- ..... -->
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
</php>
</phpunit>
Then run PHPUnit
$ vendor/bin/phpunit
All tests should be passed.
If you find any issue, or want to propose some idea to help this package better, please create an issue in this github repo.
This package is open-sourced software licensed under the MIT license.