Yii - Test

Quando scriviamo una classe PHP, ne eseguiamo il debug passo dopo passo o utilizziamo istruzioni die o echo per verificare come funziona. Se sviluppiamo un'applicazione web, stiamo inserendo i dati di test nei moduli per garantire che la pagina funzioni come previsto. Questo processo di test può essere automatizzato.

L'approccio di test automatico ha senso per i progetti a lungo termine, che sono:

  • Complesso e ampio
  • Cresce costantemente
  • Troppo costoso in termini di costo del guasto

Se il tuo progetto non sta diventando complesso ed è relativamente semplice o è solo un progetto una tantum, il test automatizzato può essere eccessivo.

Preparazione per i test

Step 1- Installa il framework Codeception. Eseguire il codice seguente.

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

Step 2 - Esegui quanto segue.

composer global status

L'output è "Directory corrente modificata in <directory>". Dovresti aggiungere "<directory> / vendor / bin" alla tua variabile PATH. In questo caso, esegui il codice seguente:

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

Step 3 - Crea un nuovo database chiamato 'yii2_basic_tests'.

Step 4 - All'interno della directory dei test eseguire.

codeception/bin/yii migrate

La configurazione del database è disponibile all'indirizzo tests/codeception/config/config.php.

Step 5 - Costruisci le suite di test tramite.

codecept build

Infissi

Lo scopo principale delle fixture è impostare l'ambiente in uno stato sconosciuto in modo che i test vengano eseguiti nel modo previsto. Yii fornisce un framework vicino al dispositivo. Un concetto chiave del quadro fixture Yii è l'oggetto fixture. Rappresenta un aspetto particolare di un ambiente di test. L'oggetto fixture è un'istanza diyii\test\Fixture class.

Per definire un dispositivo, è necessario creare una nuova classe ed estenderla da yii \ test \ Fixture o yii \ test \ ActiveFixture. Il primo è migliore per dispositivi di uso generale mentre il secondo è progettato specificamente per funzionare con database e ActiveRecord.

Test unitari

I test unitari aiutano a testare le singole funzioni. Ad esempio, funzioni del modello o una classe di componenti.

Step 1 - Crea un nuovo faro nel file chiamato ExampleFixture.php sotto il tests/codeception/fixtures directory.

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

Step 2 - Quindi, crea un nuovo file di test chiamato ExampleTest.php nella cartella 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);
      }
   }
?>

Nel codice sopra, definiamo tre test:

  • testCreateMyUser,
  • testUpdateMyUser e
  • testDeleteMyUser.

Abbiamo appena creato un nuovo utente, aggiornato il suo nome e tentato di eliminarlo. Gestiamo ilMyUser model in termini di database yii2_basic_tests, che è una copia completa del nostro vero DB.

Step 3 - Per avviare il tests, spostati nella cartella dei test ed esegui.

codecept run unit models/ExampleTest

Dovrebbe superare tutti i test. Vedrai quanto segue:

Test funzionali

I test funzionali ti aiutano a -

  • testare l'applicazione utilizzando l'emulatore del browser
  • verificare che la funzione funzioni correttamente
  • interagire con il database
  • inviare i dati agli script lato server

All'interno della cartella dei test, esegui -

generate:cept functional AboutPageCept

Il comando precedente crea il file AboutPageCept.phpfile nella cartella tests / codeception / functional. In questo test funzionale, controlleremo se il nostroabout pagina esiste.

Step 1 - Modifica il file AboutPageCept.php file.

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

Nel codice sopra indicato, abbiamo verificato se siamo nella pagina delle informazioni. Ovviamente, dovremmo vedere la parola "about" e nessuna "mela" sulla pagina.

Step 2 - Esegui il test tramite.

run functional AboutPageCept

Vedrai il seguente output: