Yii - Testowanie

Kiedy piszemy klasę PHP, debugujemy ją krok po kroku lub używamy instrukcji die lub echo, aby sprawdzić, jak to działa. Jeśli tworzymy aplikację internetową, wprowadzamy dane testowe w formularzach, aby upewnić się, że strona działa zgodnie z naszymi oczekiwaniami. Ten proces testowy można zautomatyzować.

Automatyczne podejście do testów ma sens w przypadku projektów długoterminowych, które są -

  • Złożone i duże
  • Rośnie stale
  • Zbyt drogie pod względem kosztów awarii

Jeśli Twój projekt nie staje się skomplikowany i jest stosunkowo prosty lub jest to tylko projekt jednorazowy, automatyczne testowanie może być przesadą.

Przygotowanie do testów

Step 1- Zainstaluj framework Codeception. Uruchom następujący kod.

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

Step 2 - Uruchom następujące.

composer global status

Wynik to „Zmieniono katalog bieżący na <katalog>”. Należy dodać „<directory> / vendor / bin” do zmiennej PATH. W takim przypadku uruchom następujący kod -

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

Step 3 - Utwórz nową bazę danych o nazwie 'yii2_basic_tests'.

Step 4 - Wewnątrz katalogu testów uruchom.

codeception/bin/yii migrate

Konfigurację bazy danych można znaleźć pod adresem tests/codeception/config/config.php.

Step 5 - Zbuduj pakiety testowe za pośrednictwem.

codecept build

Oprawy

Głównym celem fixturów jest ustawienie środowiska w nieznanym stanie, tak aby testy działały w oczekiwany sposób. Yii dostarcza ramy blisko urządzeń. Kluczową koncepcją frameworka urządzeń Yii jest obiekt fixture. Reprezentuje określony aspekt środowiska testowego. Obiekt fixture jest instancją klasyyii\test\Fixture class.

Aby zdefiniować urządzenie, powinieneś utworzyć nową klasę i rozszerzyć ją z yii \ test \ Fixture lub yii \ test \ ActiveFixture. Pierwsza jest lepsza dla urządzeń ogólnego przeznaczenia, podczas gdy druga jest specjalnie zaprojektowana do pracy z bazą danych i ActiveRecord.

Testy jednostkowe

Testy jednostkowe pomagają w testowaniu poszczególnych funkcji. Na przykład funkcje modelu lub klasa komponentów.

Step 1 - Utwórz nowe urządzenie w pliku o nazwie ExampleFixture.php pod tests/codeception/fixtures informator.

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

Step 2 - Następnie utwórz nowy plik testowy o nazwie ExampleTest.php w folderze testy / 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);
      }
   }
?>

W powyższym kodzie definiujemy trzy testy -

  • testCreateMyUser,
  • testUpdateMyUser i
  • testDeleteMyUser.

Właśnie utworzyliśmy nowego użytkownika, zaktualizowaliśmy jego nazwę i próbowaliśmy go usunąć. ZarządzamyMyUser model pod względem bazy danych yii2_basic_tests, która jest kompletną kopią naszej prawdziwej bazy danych.

Step 3 - Aby rozpocząć tests, przejdź do folderu testów i uruchom.

codecept run unit models/ExampleTest

Powinien przejść wszystkie testy. Zobaczysz następujące -

Testy funkcjonalne

Testy funkcjonalne pomagają w -

  • testowanie aplikacji za pomocą emulatora przeglądarki
  • sprawdź, czy funkcja działa poprawnie
  • interakcji z bazą danych
  • przesyłać dane do skryptów po stronie serwera

Wewnątrz folderu testów uruchom -

generate:cept functional AboutPageCept

Powyższe polecenie tworzy plik AboutPageCept.phpplik w folderze testy / codeception / funkcjonalny. W tym teście funkcjonalnym sprawdzimy, czy naszabout strona istnieje.

Step 1 - Zmodyfikuj plik AboutPageCept.php plik.

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

W powyższym kodzie sprawdziliśmy czy jesteśmy na stronie about. Oczywiście na stronie powinno znaleźć się słowo „o”, a nie „jabłko”.

Step 2 - Uruchom test przez.

run functional AboutPageCept

Zobaczysz następujący wynik -