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.
Tak jak w testach jednostkowych, testy funkcjonalne są zapisywane jako klasy XyzTest
,
które dziedziczą z CWebTestCase, gdzie Xyz
oznacza klasę, która będzie testowana.
Ponieważ PHPUnit_Extensions_SeleniumTestCase
jest rodzicem dla klasy CWebTestCase,
możemy używac wszystkich metod dziedziczących z tej klasy.
Klasa testu funkcjonalnego zachowana jest w pliku PHP o nazwie XyzTest.php
.
Umownie, plik testu funkcjonalnego może być zapisany w katalogu protected/tests/functional
.
Klasa testująca zawiera przede wszystkim zestaw metod testujących o nazwie testAbc
,
gdzie Abc
często jest nazwą funkcjonalności, którą będziemy testować. Na przykład,
aby przetestować funkcjonalność logowania użytkownika, możemy posiadać metodę o nazwie testLogin
.
Metoda testująca zazawyczaj zawiera sekwencję wyrażeń, które wydają komendy Selenium RC
by oddziaływało ono z aplikacją sieciową, która jest testowana. Zawiera ona również
wyrażenia z asercjami w celu zweryfikowania, czy aplikacja sieciowa odpowiedziała
zgodnie z tym jak oczekiwano.
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
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.