Initialize Compose
> composer init Generates: After selecting options { "name": "rosha/code-katas", "description": "PHP Boilerplate", "authors": [ { "name": "Rosha", "email": "[email protected]" } ], "require": {} }
Add Autoloader, phpunit
{ "name": "rosha/code-katas", "description": "PHP Boilerplate", "authors": [ { "name": "Rosha", "email": "[email protected]" } ], "require": {} "autoload": { "psr-4": { "PHPBoilerplate\\": "src/" } }, "require-dev": { "phpunit/phpunit": "^6" } }
Now running composer install
on the terminal will install phpunit inside a vendor folder along with composer-lock file. It generates an autoload.php file. This file is used by composer to automatically load files based on the PSR-4 spec we stated earlier. Incase, autoload name is changed from say "PHPBoildeplate" to something else, composer dumpautoload
needs to run on the terminal.
Create a src folder, test folder and phpunit.xml that is going to tell phpunit to look for the test folder to run the test
> mkdir src > mkdir test > touch phpunit.xml // Add the following content in the phpunit.xml that tells phpunit to look into test folder to run the text <?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true"> <testsuites> <testsuite name="Application Test Suite"> <directory>./test/</directory> </testsuite> </testsuites> </phpunit>
Now add a Greetings class in the src/Greetings folder
> cd src > mkdir Greetings > cd Greetings > touch Greetings.php //inside the Greetings.php namespace PHPBoilerplate\Greetings; class Greetings { public static function sayHelloWorld() { return 'Hello World'; } }
Now create a index.php file on the src
folder that makes a uses Greetings
> cd src > touch index.php // inside index.php require_once '../vendor/autoload.php'; use PHPBoilerplate\Greetings\Greetings; echo Greetings::sayHelloWorld();
Now, to run the file from the command line:
> cd src > php index.php
Withing the test folder create GreetingsTest.php
file
> cd test > touch GreetingsTest.php //Content of GreetingsTest.php namespace test; use PHPUnit\Framework\TestCase; use PHPBoilerplate\Greetings\Greetings; class GreetingsTest extends TestCase { /** * @test */ public function displays_hello_world_message() { $this->assertEquals( 'Hello World', Greetings::sayHelloWorld() ); } }
Now, to run the php Unit
> phpunit --bootstrap vendor/autoload.php test // or if phpunit not installed > vendor/bin/phpunit
> git inti // Add vendor the the .gitignor > echo "vendor" >> .gitignore // Add & commit the change. > git add . > git commit -m 'Initializing Project' // Add the repository > git remote add origin https://github.com/rajsamb/PHPBoilerplate.git > git push -u origin master