Функциональное тестирование

Перед прочтением даного раздела рекомендуется прочитать документацию по 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.