Testy funkcjonalne

Zanim przeczytasz ten rozdział, zaleca się abyś przeczytał najpierw dokumentację Selenium oraz dokumentację PHPUnit. W dalszej części streszczamy pokrótce podstawowe zasadu pisania testów funkcjonalnych w Yii.

Zanim opiszemy jak napisać test funkcjonalny, popatrzmy na plik WebTestCase.php wygenerowany przez komendę yiic webapp. Plik ten definiuje WebTestCase, który może służyć jako klasa bazowa dla testów funkcjonalnych wszystkich klas.

define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
 
class WebTestCase extends CWebTestCase
{
    /**
     * Sets up before each test method runs.
     * This mainly sets the base URL for the test application.
     */
    protected function setUp()
    {
        parent::setUp();
        $this->setBrowserUrl(TEST_BASE_URL);
    }
 
    ......
}

Klasa WebTestCase przede wszystkim ustawia adres bazowy URL strony, która będzie testowana. Później, w metodach testujących, możemy używać relatywne adresy URL w celu określenia, która strona powinna być przetestowana.

Powinniśmy też zwrócić uwagę, na to że w adresie bazowym URL używamy index-test.php jako pliku wejściowego zamiast index.php. Jedyna różnica pomiędzy index-test.php a index.php to ta, że pierwsza używa test.php jako pliku konfiguracji aplikacji, gdy druga używa main.php.

Opiszemy teraz jak przetestować funkcjonalność wyświetlania postów w demo blogu. Najpierw napiszemy klasę testującą w następujący sposób, zauważając iż klasa testowa dziedziczy z klasy bazowej, którą przed chwilką opisaliśmy:

class PostTest extends WebTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
    );
 
    public function testShow()
    {
        $this->open('post/1');
        // sprawdź czy tytuł przykładowego postu istnieje
        $this->assertTextPresent($this->posts['sample1']['title']);
        // sprawdź czy formularz komentarza istnieje 
        $this->assertTextPresent('Zostaw komentarz');
    }
 
    ......
}

Tak jak pisząc klasy testów jednostkowych, tak i tutaj deklarujemy konfiguracje testów, które bedziemy używać podczas testowania. Tutaj wkazaliśmy, iż użyta będzie konfiguracja testu Post. W metodzie testującej testShow, najpierw poinstruowaliśmy Selenium RC aby otwarło adres URL post/1. Zauważ, że jest to relatywny adres URL a kompletny adres URL jest utworzony poprzez dołączenie do niego adresu bazowego URL, który ustawiliśmy w klasie bazowej (np. http://localhost/yii/demos/blog/index-test.php/post/1). Następnie weryfikujemy czy możemy znaleźć tytuł postu sample1 na aktualnej stronie. Sprawdzamy również, czy strona zawiera tekst Zostaw komentarz.

$Id: test.functional.txt 1662 2010-01-04 19:15:10Z qiang.xue $