From 89fa0608a2e20e4914f6d2f3d1a156c580abbbda Mon Sep 17 00:00:00 2001 From: Laurent Pierron <Laurent.Pierron@inria.fr> Date: Tue, 7 Feb 2023 11:21:44 +0100 Subject: [PATCH] adding TP codeception --- codeception.md | 142 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 codeception.md diff --git a/codeception.md b/codeception.md new file mode 100644 index 0000000..660d4de --- /dev/null +++ b/codeception.md @@ -0,0 +1,142 @@ +--- +marp: true +style: | + .columns { + display: grid; + grid-template: + "a b b"; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 1rem; + } + .columns-left { + background: green; + } + .columns-right { + background: beige; + } +--- + +# TP CodeCeption + +**Source** : https://codeception.com/docs/GettingStarted + +(Codeception](https://codeception.com) est un framework de tests pour envirnonnements de dévloppements PHP : Symfony, Laravel, etc. + +Il fournit les outils pour développer des tests : unitaires, fonctionnels, d'intégration et d'acceptation (définis par le client dans le cahier des charges). + +## Trois types de tests +- Unit : teste une classe PHP +- Functional : teste un ensemble de classes PHP +- Acceptance : teste l'application Web finale comme un utilisateur + +--- + +# Prérequis projet `PasteBin` + +1. Installer le logiciel [PrivateBin](https://github.com/PrivateBin/PrivateBin) with `git clone git clone https://github.com/PrivateBin/PrivateBin` +1. Installation des dépendances : `composer update` +1. Démarrer le serveur : `php -S localhost:8000` +1. Tester en ouvrant la page : http://localhost:80001. +1. Retirer `phpunit` à cause d'un conflit : `composer remove 'phpunit/phpunit'` + +--- + +# Installation de codeception + +Source : https://codeception.com/quickstart + +1. `composer require "codeception/codeception" --dev` +1. `php vendor/bin/codecept bootstrap` + +Vous pouvez également installer l'extension `Codeception` pour votre IDE si elle existe. + +--- + +# Création du premier test + +Un premier test d'acceptation, créé automatqiuement dans `tests/Acceptance/SigninCest.php` + +1. `php vendor/bin/codecept generate:cest Acceptance Signin` + +--- + +# Modification du premier test + +<div class="columns"> +<div class="columns-left"> + +## Test en *Langage Laturel* + +``` +I amOnPage '/login' +I fillField 'email','john_doe@gmail.com'' +I fillField 'password','123456' +I click 'Login' +``` + +</div> +<div class="columns-right"> + +## Test en *Codeception PHP* + +```PHP +namespace Tests\Acceptance; + +use \Tests\Support\AcceptanceTester; + +class SigninCest +{ + public function signInSuccessfully(AcceptanceTester $I) + { + $I->amOnPage('/login'); + $I->fillField('email', 'john_doe@gmail.com'); + $I->fillField('password', '123456'); + $I->click('Login'); + } +} +``` + +</div> +</div> + +---- + +# Lancement du test + +Configurer le lancement des tests d'acceptation, en indiquant l'URL de votre application : `tests/Acceptance.suite.yml` +``` +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: http://localhost:8000/ +``` + +Lancer le test avec la commande `run`: `php vendor/bin/codecept run --steps` + +Modifier le test pour valider le lancement de `PasteBin`. + +---- + +Suite sur Codeception : +- Développemnt guidé par le *comportement* : https://codeception.com/docs/BDD +- Tests avec des objets *bidons* : https://codeception.com/docs/UnitTests#Mocks +- Tests d'intégration : https://codeception.com/docs/UnitTests#Integration-Tests +- Tests de base de données : https://codeception.com/docs/UnitTests#Testing-Database + +---- + +# Mise en oeuvre sur un autre exemple + +Source : https://github.com/Codeception/laravel-module-tests + +``` +git clone https://github.com/Codeception/laravel-module-tests.git goodcode +cd goodcode +composer update +cp .env.testing .env +touch database/database.sqlite +php artisan migrate --seed +vendor/bin/codecept run Functional +php artisan serve +``` -- GitLab