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 -