[[oktatas:web:composer|< Composer]]
====== Composer projekt készítés ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2021
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Bevezetés =====
Ebben leírásban Composer segítségével készítünk egy egyszerű PHP projektet,
keretrendszerek nélkül.
A projektben elkészített program forráskódja:
* https://github.com/andteki/triangle
===== Projekt előkészítése =====
Hozzuk létre a projekt fájlt:
mkdir triangle
cd triangle
Készítsük elő a projektet:
composer init
A futtatás eredményeként egy interaktív programot kapunk, ahol kimenet ehhez hasonló:
composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (/) [janos/triangle]:
Description []: Háromszog számítások
Author [Nagy Janos , n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
Add PSR-4 autoload mapping? Maps namespace "Janos\Haromszog" to the entered relative path. [src/, n to skip]:
{
"name": "janos/triangle",
"description": "Háromszog számítások",
"license": "MIT",
"autoload": {
"psr-4": {
"Janos\\Triangle\\": "src/"
}
},
"authors": [
{
"name": "Nagy Janos",
"email": "janos@zold.lan"
}
],
"minimum-stability": "dev",
"require": {}
}
Do you confirm generation [yes]? y
Generating autoload files
Generated autoload files
PSR-4 autoloading configured. Use "namespace Janos\Triangle;" in src/
Include the Composer autoloader with: require 'vendor/autoload.php';
===== Használat =====
Hozzuk létre a projekt src könyvtárban a Shape könyvtárakat.
mkdir src/Shape
Javítsuk a composer.json fájlban a psr-4 bejegyzést:
"autoload": {
"psr-4": {
"Shape\\": "src/Shape"
}
},
Futtassuk a composer dump-autoload parancsot, hogy
frissítse a vendor könyvtárban található autoload.php
fájlt:
composer dump-autoload
Ha valamit változtatunk az autoload szekción, akkor futtassuk ezt a parancsot.
Írjuk meg a Triangle osztályt, a Shape könyvtáron belül:
A fájl útvonala így:
src/Shape/Triangle.php
===== Teszt írása =====
Készítsünk hozzá egy tesztet:
===== Teszt futtatása =====
Végezzük el tesztet:
php tests/testTriangle.php
A tesztet megnézhetjük PHP szerveren is:
php -S localhost:8000 -t tests
A böngészőbe írjuk:
localhost:8000/testTriangle.php
===== Script írása =====
Írjunk scriptet, ami elvégzi tesztet. Szerkesszük a composer.json
fájlt. Adjuk hozzá a következő részt:
"scripts": {
"test": ["php tests/test.php", "echo Teszt indul"]
}
A composer.json teljes tartalma most:
{
"name": "janos/lap",
"description": "Teszt weblap",
"autoload": {
"psr-0": {
"HelloWorld": "src/"
}
},
"authors": [
{
"name": "Nagy Janos",
"email": "janos@zold.lan"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=5.5.0"
},
"scripts": {
"test": ["echo Teszt indul", "php tests/testTriangle.php"]
}
}
A teszt indítás most:
composer run test
===== Külső függőség használata =====
Időzítőt szeretnénk a fejlesztési idő alatt használni. Szeretnénk
megmérni mennyi ideig tart a futás. Telepítsük ehhez a phpunit/php-timer csomagot:
composer require --dev phpunit/php-timer
Írjuk át a testTriangle.php állományunkat a használathoz:
start();
echo Triangle::calcArea(30, 35) . "\n";
$duration = $timer->stop();
print $duration->asSeconds() . "\n";
Futtassuk újra a tesztet:
composer run test
A kimenet most ehhez hasonló:
> echo Teszt indul
Teszt indul
> php tests/testTriangle.php
525
0.000203483
===== Verziókövetés =====
A vendor könyvtár és a composer.lock fájl tartalmát nem szeretnénk
tárolni, ezért írjuk be őket a .gitignore fájlba.
vendor
composer.lock
git init
git add src tests composer.json
git commit -m "Kezdés"
===== Könyvtárszerkezet =====
A könyvtárszerkezet most a teljesség igénye nélkül:
haromszog/
|-src/
| `-Shape/
| `-Triangle.php
|-test/
| `-testTriangle.php
|-vendor/
| |-composer/
| `-autoload.php
`-composer.json
===== PHP Unit teszt =====
A phpunit/phpunit csomagot fogjuk használni:
* https://packagist.org/packages/phpunit/phpunit
composer require --dev phpunit/phpunit
A testTriangle.php fájl most békén hagyjuk, és helyett egy TriangleTest.php fájlt
készítünk.
require_once __DIR__.'/../vendor/autoload.php';
use Shape\Triangle;
use PHPUnit\Framework\TestCase;
class TriangleTest extends TestCase {
public function testCalcArea() {
$triangle = new Triangle();
$this->assertEquals(525, $triangle->calcArea(30, 35));
}
}
A tesztelés előtt nézzük meg milyen phpunit parancsunk van. Ha globálisan telepítve van, nézzük meg:
phpunit --version
Használhatjuk a helyi vendor könyvtárba letöltött változatot is:
./vendor/bin/phpunit
==== A teszt futtatása ====
phpunit tests
Vagy:
./vendor/bin/phpunit tests
A keletkezett .phpunit.result.cache fájlnév felvehető a .gitignore fájlba.
===== Függőségek telepítése =====
A már beállított függőségek telepítése:
composer install
npm install && npm run dev
===== Források =====
* https://phpunit.de/getting-started/phpunit-5.html (2021)
* https://github.com/sebastianbergmann/php-timer (2021)
* https://getcomposer.org/doc/01-basic-usage.md (2021)