Функціональне тестування

Перед прочитанням даного розділу рекомендується прочитати документацію по Selenium і документацію по PHPUnit. Далі ми підсумуємо основні принципи написання функціональних тестів у Yii:

Перед описом, як же писати функціональний тест, давайте глянемо файл WebTestCase.php, згенерований командою yiic webapp. Цей файл визначає клас WebTestCase, який може служити базовим для всіх класів функціональних тестів.

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.

Тепер ми опишемо, як протестувати функцію відображення запису демо-блога. Спочатку ми пишемо тестовий клас, як показано нижче. Зазначимо, що тестовий клас успадковує від базового класу, який ми тільки що описали:

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.

Підказка: Перед запуском функціональних тестів запустіть сервер Selenium-RC. Зробити це можна командою java -jar selenium-server.jar, виконаної із директорії, в яку встановлено Selenium.