Yii - Test

Lorsque nous écrivons une classe PHP, nous la déboguons étape par étape ou utilisons des instructions die ou echo pour vérifier son fonctionnement. Si nous développons une application Web, nous saisissons des données de test dans des formulaires pour nous assurer que la page fonctionne comme prévu. Ce processus de test peut être automatisé.

L'approche de test automatique a du sens pour les projets à long terme, qui sont -

  • Complexe et grand
  • Grandit constamment
  • Trop cher en termes de coût de l'échec

Si votre projet ne devient pas complexe et est relativement simple ou s'il ne s'agit que d'un projet ponctuel, les tests automatisés peuvent être exagérés.

Préparation aux tests

Step 1- Installez le framework Codeception. Exécutez le code suivant.

composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"

Step 2 - Exécutez ce qui suit.

composer global status

La sortie est "Changement du répertoire actuel en <répertoire>". Vous devez ajouter le '<répertoire> / vendor / bin' à votre variable PATH. Dans ce cas, exécutez le code suivant -

export PATH = $PATH:~/.composer/vendor/bin

Step 3 - Créez une nouvelle base de données appelée 'yii2_basic_tests'.

Step 4 - Dans le répertoire des tests, exécutez.

codeception/bin/yii migrate

La configuration de la base de données peut être trouvée sur tests/codeception/config/config.php.

Step 5 - Construisez les suites de tests via.

codecept build

Agencements

Le but principal des fixtures est de configurer l'environnement dans un état inconnu afin que vos tests s'exécutent de la manière attendue. Yii fournit un cadre de montage proche. Un concept clé du cadre de montage Yii est l'objet fixture. Il représente un aspect particulier d'un environnement de test. L'objet fixture est une instance duyii\test\Fixture class.

Pour définir un appareil, vous devez créer une nouvelle classe et l'étendre depuis yii \ test \ Fixture ou yii \ test \ ActiveFixture. Le premier est meilleur pour les appareils à usage général tandis que le second est spécialement conçu pour fonctionner avec la base de données et ActiveRecord.

Tests unitaires

Les tests unitaires vous aident à tester des fonctions individuelles. Par exemple, des fonctions de modèle ou une classe de composants.

Step 1 - Créez un nouvel appareil dans le fichier appelé ExampleFixture.php sous le tests/codeception/fixtures annuaire.

<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = ‘app⊨’MyUser';
   }
?>

Step 2 - Ensuite, créez un nouveau fichier de test appelé ExampleTest.php dans le dossier tests / codeception / unit / models.

<?php
   namespace tests\codeception\unit\models;
   use app\models\MyUser;
   use yii\codeception\TestCase;
   class ExampleTest extends TestCase {
      public function testCreateMyUser() {
         $m = new MyUser();
         $m->name = "myuser";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
      }
      public function testUpdateMyUser() {
         $m = new MyUser();
         $m->name = "myuser2";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
         $this->assertEquals("myuser2", $m->name);
      }
      public function testDeleteMyUser() {
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNotNull($m);
         MyUser::deleteAll(['name' => $m->name]);
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNull($m);
      }
   }
?>

Dans le code ci-dessus, nous définissons trois tests -

  • testCreateMyUser,
  • testUpdateMyUser et
  • testDeleteMyUser.

Nous venons de créer un nouvel utilisateur, de mettre à jour son nom et d'essayer de le supprimer. Nous gérons leMyUser modèle en termes de base de données yii2_basic_tests, qui est une copie complète de notre véritable base de données.

Step 3 - Pour démarrer le tests, allez dans le dossier tests et exécutez.

codecept run unit models/ExampleTest

Il devrait passer tous les tests. Vous verrez ce qui suit -

Tests fonctionnels

Les tests fonctionnels vous aident à -

  • test de l'application à l'aide de l'émulateur de navigateur
  • vérifier que la fonction fonctionne correctement
  • interagir avec la base de données
  • soumettre des données à des scripts côté serveur

Dans le dossier de tests, exécutez -

generate:cept functional AboutPageCept

La commande ci-dessus crée le AboutPageCept.phpdans le dossier tests / codeception / functional. Dans ce test fonctionnel, nous allons vérifier si notreabout la page existe.

Step 1 - Modifier le AboutPageCept.php fichier.

<?php
   $I = new FunctionalTester($scenario);
   $I->wantTo('perform actions and see result');
   $I->amOnPage('site/about');
   $I->see('about');
   $I->dontSee('apple');
?>

Dans le code ci-dessus, nous avons vérifié si nous sommes sur la page à propos. De toute évidence, nous devrions voir le mot «à propos» et non «pomme» sur la page.

Step 2 - Exécutez le test via.

run functional AboutPageCept

Vous verrez la sortie suivante -