davispeixoto / laravel-test-generator
Laravel 4 tests generator
Installs: 1 199
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 3
Forks: 4
Open Issues: 1
Requires
- illuminate/console: 4.*
- illuminate/filesystem: 4.*
- illuminate/support: 4.*
- symfony/yaml: 2.5.*@dev
Requires (Dev)
- phpunit/phpunit: 4.3.*
README
This Laravel 4 package provides a powerful test generator to speed up your development process.
It's based on the facility PHPUnit Skeleton Generator provides and Jeffrey Way's Laravel 4 generators.
The first doesn't work 100% with all Laravel 4 application classes. Usually you need to add some dependency in the class to make it work, even if your project solves it all with the Composer PSR-0 compliant autoloader.
The second, generates a really tiny test class. It doesn't maps all class public methods and let everything in place.
This generator loads the target with and use the PHP Reflection features for reverse engineer all public methods, and provide an enhanced skeleton, including calls for data providers.
Installation
Begin by installing this package through Composer. Edit your project's composer.json
file to require davispeixoto/testingtool
.
"require": {
"laravel/framework": "4.*",
"davispeixoto/laravel-test-generator": "1.0.*"
},
"minimum-stability" : "stable"
Next, update Composer from the Terminal:
composer update
Once this operation completes, the final step is to add the service provider. Open app/config/app.php
, and add a new item to the providers array.
'Davispeixoto\TestGenerator\TestGeneratorServiceProvider'
That's it! You're all set to go. Run the artisan
command from the Terminal to see the new tests:generate
commands.
php artisan
Usage
Use tests:generate
when you need to create a new PHPUnit test class.
Here's an example:
php artisan controller:make UserController php artisan tests:generate UserController
This will generate a resource controller and a test class app/tests/UserControllerTest.php
as follows:
<?php class UserControllerTest extends TestCase { /** * Tests UserController::index */ public function testindex() { //@TODO implement testindex body } /** * Tests UserController::create */ public function testcreate() { //@TODO implement testcreate body } /** * Tests UserController::store */ public function teststore() { //@TODO implement teststore body } /** * Tests UserController::show * * @dataProvider providershow */ public function testshow($id) { //@TODO implement testshow body } /** * Tests UserController::edit * * @dataProvider provideredit */ public function testedit($id) { //@TODO implement testedit body } /** * Tests UserController::update * * @dataProvider providerupdate */ public function testupdate($id) { //@TODO implement testupdate body } /** * Tests UserController::destroy * * @dataProvider providerdestroy */ public function testdestroy($id) { //@TODO implement testdestroy body } /** * Data provider function for UserController::show */ public function providershow() { return $this->dataProvider('UserController.show.csv'); } /** * Data provider function for UserController::edit */ public function provideredit() { return $this->dataProvider('UserController.edit.csv'); } /** * Data provider function for UserController::update */ public function providerupdate() { return $this->dataProvider('UserController.update.csv'); } /** * Data provider function for UserController::destroy */ public function providerdestroy() { return $this->dataProvider('UserController.destroy.csv'); } } ?>
For full usage, I recommend first reading the article Testing Like a Boss in Laravel. There are some performance tuning to be made in the Laravel 4 core TestCase class.
Along with them, to add the data providers functionality. Add to your Laravel composer.json:
"require": {
"laravel/framework": "4.1.*",
"davispeixoto/testingtool": "dev-master",
"keboola/csv" : "dev-master"
},
"minimum-stability" : "dev"
Next, update Composer from the Terminal:
composer update
And finally, let the TestCase class like this:
<?php class TestCase extends Illuminate\Foundation\Testing\TestCase { /** * Default preparation for each test */ public function setUp() { parent::setUp(); $this->prepareForTests(); } /** * Creates the application. * * @return \Symfony\Component\HttpKernel\HttpKernelInterface */ public function createApplication() { $unitTesting = true; $testEnvironment = 'testing'; return require __DIR__.'/../../bootstrap/start.php'; } /** * Migrates the database. * This will cause the tests to run quickly. */ private function prepareForTests() { Artisan::call('migrate'); } /** * dataProviders Factory * dataProvider Short Description * * @param string $fileName * @return \Keboola\Csv\CsvFile */ public function dataProvider($fileName) { return new Keboola\Csv\CsvFile(__DIR__.'/data/'.$fileName); } } ?>
With these little changes, you can really speed up your testing process for your Laravel application.
License
This Test Generator is open-sourced software licensed under the MIT license
Versioning
This project follows the Semantic Versioning