Testes Funcionais

Antes de ler esta seção, é recomendável que você primeiro leia a documentação do Selenium e a documentação do PHPUnit. Nós resumimos a seguir os princípios básicos de escrita de testes funcionais no Yii:

Antes de explicarmos como escrever um teste funcional, observaremos o arquivo WebTestCase.php gerado pelo comando yiic webapp. Este arquivo define a classe WebTestCase que pode servir como a classe-mãe de todas as classes de testes funcionais.

define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
 
class WebTestCase extends CWebTestCase
{
    /**
     * Configura antes que cada método de teste seja executado.
     * Define principalmente a URL base da aplicação de testes.
     */
    protected function setUp()
    {
        parent::setUp();
        $this->setBrowserUrl(TEST_BASE_URL);
    }
 
    ......
}

A classe WebTestCase define principalmente a URL base de todas as páginas que serão testadas. Mais adiante, nos métodos de teste, podemos usar URLs relativas para especificar quais páginas serão testadas.

Também devemos prestar atenção se usamos na URL base de testes o arquivo index-test.php como script de entrada ao invés de index.php. A única diferença entre index-test.php e index.php é que o primeiro usa a configuração de aplicação test.php enquanto o segundo usa main.php.

Agora descrevemos como testar a funcionalidade de mostrar um post no exemplo de blog. Primeiro escrevemos a classe de teste como segue, observando que ela estende da classe-mãe que acabamos de mostrar:

class PostTest extends WebTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
    );
 
    public function testShow()
    {
        $this->open('post/1');
        // verifica se o título do post de exemplo existe
        $this->assertTextPresent($this->posts['sample1']['title']);
        // verifica se o formulário de comentários existe
        $this->assertTextPresent('Leave a Comment');
    }
 
    ......
}

Como ao escrever classes de testes unitários, nós declaramos as fixtures que serão usadas por este teste. Aqui indicamos que a fixture Post deve ser usada. No método de teste testShow, primeiros instruimos o Selenium RC a acessar a URL post/1. Observe que esta é uma URL relativa, e que a URL completa é formada adicionando-a à URL base que configuramos na classe-mãe (ou seja, http://localhost/yii/demos/blog/index-test.php/post/1). Então verificamos que podemos encontrar o título do post sample1 na página da Web atual. E nós também verificamos que a página contém o texto Leave a Comment (deixe um comentário).

Dica: Antes de rodar os testes funcionais, o servidor do Selenium-RC deve estar iniciado. Isso pode ser feito executando-se o comando java -jar selenium-server.jar dentro do diretório de instalação do servidor do Selenium.

$Id$