mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-24 00:46:52 +01:00
89 lines
5.7 KiB
Plaintext
89 lines
5.7 KiB
Plaintext
Функціональне тестування
|
||
========================
|
||
|
||
Перед прочитанням даного розділу рекомендується прочитати [документацію по Selenium](http://seleniumhq.org/docs/)
|
||
і [документацію по PHPUnit](http://www.phpunit.de/wiki/Documentation).
|
||
Далі ми підсумуємо основні принципи написання функціональних тестів у Yii:
|
||
|
||
* Як і модульний тест, функціональний тест пишеться в класі `XyzTest`,
|
||
успадковує клас [CWebTestCase], де `Xyz` — імʼя класу, що підлягає тестуванню.
|
||
Ми можемо використовувати всі методи класу `PHPUnit_Extensions_SeleniumTestCase`,
|
||
бо він є предком класу [CWebTestCase].
|
||
|
||
* Клас функціонального тесту зберігається у файлі з імʼям `XyzTest.php`.
|
||
За згодою, файл функціонального тесту може зберігатися в директорії `protected/tests/functional`.
|
||
|
||
* Основний вміст класу тесту — набір тестових методів з іменами `testAbc`,
|
||
де `Abc` — часто імʼя тестованої особливості.
|
||
Наприклад, для тестування особливості входу користувача у нас є метод `testLogin`.
|
||
|
||
* Тестовий метод зазвичай містить послідовність виразів, які будуть командами перевірки для Selenium RC,
|
||
що показує хід і результати тестування веб-додатка.
|
||
У ньому також містяться вирази тверджень для перевірки, що веб-додаток відповідає саме так, як очікувалося.
|
||
|
||
Перед описом, як же писати функціональний тест, давайте глянемо файл `WebTestCase.php`,
|
||
згенерований командою `yiic webapp`. Цей файл визначає клас `WebTestCase`,
|
||
який може служити базовим для всіх класів функціональних тестів.
|
||
|
||
~~~
|
||
[php]
|
||
define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
|
||
|
||
class WebTestCase extends CWebTestCase
|
||
{
|
||
/**
|
||
* Метод виконується перед запуском тесту.
|
||
* В основному, встановлює базовий URL тестованого додатку.
|
||
*/
|
||
protected function setUp()
|
||
{
|
||
parent::setUp();
|
||
$this->setBrowserUrl(TEST_BASE_URL);
|
||
}
|
||
|
||
…
|
||
}
|
||
~~~
|
||
|
||
Клас `WebTestCase` в основному встановлює базовий URL тестованих сторінок.
|
||
Далі, в тестових методах, ми можемо використовувати відносні URL для визначення тестованих сторінок.
|
||
|
||
Ми також повинні звернути увагу, що згідно базового тестового URL у якості вхідної точки використовується
|
||
файл `index-test.php` замість файлу `index.php`. Єдина відмінність між сценаріями `index-test.php` і `index.php` те,
|
||
що у якості файлу конфігурації додатка перший використовує файл `test.php`, а другий — файл `main.php`.
|
||
|
||
Тепер ми опишемо, як протестувати функцію відображення запису [демо-блога](http://www.yiiframework.com/demos/blog).
|
||
Спочатку ми пишемо тестовий клас, як показано нижче.
|
||
Зазначимо, що тестовий клас успадковує від базового класу, який ми тільки що описали:
|
||
|
||
~~~
|
||
[php]
|
||
class PostTest extends WebTestCase
|
||
{
|
||
public $fixtures=array(
|
||
'posts'=>'Post',
|
||
);
|
||
|
||
public function testShow()
|
||
{
|
||
$this->open('post/1');
|
||
// перевіряємо наявність заголовка певного запису
|
||
$this->assertTextPresent($this->posts['sample1']['title']);
|
||
// перевіряємо наявність форми коментаря
|
||
$this->assertTextPresent('Leave a Comment');
|
||
}
|
||
|
||
…
|
||
}
|
||
~~~
|
||
|
||
Як і при написанні класу модульного тесту, ми оголошуємо фікстури для використання цим тестом. Тут ми показуємо,
|
||
що повинна використовуватися фікстура `Post`. У тестуючому методі `testShow` ми спочатку доручаємо
|
||
`Selenium RC` відкрити URL `post/1`. Зауважимо, що це відносний URL, а повний URL формується шляхом додавання
|
||
відносного до базового URL (тобто `http://localhost/yii/demos/blog/index-test.php/post/1`), який ми встановили в базовому класі.
|
||
Потім ми перевіряємо, що можемо знайти заголовок запису `sample1` на даній сторінці.
|
||
І ми також перевіряємо, що сторінка містить текст `Leave a comment`.
|
||
|
||
> Tip|Підказка: Перед запуском функціональних тестів запустіть сервер Selenium-RC.
|
||
Зробити це можна командою `java -jar selenium-server.jar`,
|
||
виконаної із директорії, в яку встановлено Selenium. |