mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-04 23:34:05 +01:00
97 lines
4.0 KiB
Plaintext
97 lines
4.0 KiB
Plaintext
Testy funkcjonalne
|
|
==================
|
|
|
|
Zanim przeczytasz ten rozdział, zaleca się abyś przeczytał najpierw
|
|
[dokumentację Selenium](http://seleniumhq.org/docs/) oraz
|
|
[dokumentację PHPUnit](http://www.phpunit.de/wiki/Documentation).
|
|
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.
|
|
|
|
~~~
|
|
[php]
|
|
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](http://www.yiiframework.com/demos/blog). 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:
|
|
|
|
~~~
|
|
[php]
|
|
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
|
|
testuów, które bedziemy używać podczas testowania. Tutaj wkazaliśmy, iż
|
|
konfiguracja testu `Post` będzie użyta. 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`.
|
|
|
|
|
|
<div class="revision">$Id: test.functional.txt 1662 2010-01-04 19:15:10Z qiang.xue $</div> |