diff --git a/docs/guide/pt_br/test.functional.txt b/docs/guide/pt_br/test.functional.txt new file mode 100644 index 000000000..9afa6af19 --- /dev/null +++ b/docs/guide/pt_br/test.functional.txt @@ -0,0 +1,104 @@ +Testes Funcionais +================== + +Antes de ler esta seção, é recomendável que você primeiro leia a +[documentação do Selenium](http://seleniumhq.org/docs/) e a +[documentação do PHPUnit](http://www.phpunit.de/wiki/Documentation). Nós +resumimos a seguir os princípios básicos de escrita de testes funcionais no Yii: + + * Como nos testes unitários, um teste funcional é escrito em termos de uma + classe `XyzTest` que estende de [CWebTestCase], onde `Xyz` representa a + classe que está sendo testada. Uma vez que + `PHPUnit_Extensions_SeleniumTestCase` é a classe-mãe de [CWebTestCase], + podemos usar todos os métodos herdados desta classe. + + * A classe do teste funcional é salva num arquivo PHP chamado `XyzTest.php`. + Por convenção, o arquivo do teste funcional pode ser armazenado no diretório + `protected/tests/functional`. + + * A classe de teste contém principalmente um conjunto de métodos de teste + chamados como `testAbc`, onde `Abc` geralmente é o nome de uma funcionalidade + que será testada. Por exemplo, para testar a funcionalidade de login, podemos + ter um método de teste chamado `testLogin`. + + * Um método de teste geralmente contém uma série de declarações que emitirão + comandos para o Selenium RC interagir com a aplicação Web que está sendo + testada. Também contém declarações de asserção para verificar que a aplicação + Web responde conforme o esperado. + +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. + +~~~ +[php] +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](http://www.yiiframework.com/demos/blog). Primeiro escrevemos a +classe de teste como segue, observando que ela estende da classe-mãe que +acabamos de mostrar: + +~~~ +[php] +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). + +> Tip|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$
\ No newline at end of file