Files
yii/docs/guide/ru/test.functional.txt
2010-11-14 14:17:44 +00:00

104 lines
6.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Функциональное тестирование
===========================
Перед прочтением даного раздела рекомендуется прочитать
[документацию по 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` на данной странице. И мы также проверяем, что страница содержит текст
`Оставить комментарий`.
> Tip|Подсказка: Перед запуском функциональных тестов запустите сервер Selenium-RC.
> Сделать это можно командой `java -jar selenium-server.jar`, выполненной в
> директории, в которую установлен Selenium.
<div class="revision">$Id: test.functional.txt 1662 2010-01-04 19:15:10Z qiang.xue $</div>