Download the PHP package pandora-una/pandora-testes without Composer
On this page you can find all versions of the php package pandora-una/pandora-testes. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download pandora-una/pandora-testes
More information about pandora-una/pandora-testes
Files in pandora-una/pandora-testes
Package pandora-testes
Short Description Base da Pandora, com classes abstratas e auxiliares
License
Homepage http://www.pandora.com.br/
Informations about the package pandora-testes
pandora-testes
Este repositório contém ferramentas para facilitar a criação de testes de aceitação usando Behat com MinkExtension e WebApiExtension em aplicações feitas em Zend Framework 2 e Doctrine 2. As ferramentas são:
- Interface simples para a criação de Docrine fixtures.
- Passos para a criação de entidades na base de dados.
- Passos para espera de requisições Ajax.
- Banco de dados de teste limpo entre a execução dos testes.
- Script shell para alterar o enviroment do Apache2 para test durante a execução do teste
- Binário com Selenium2
Instalação
A forma recomendada de instalação é por composer:
Binários
Behat já possui um binário para rodar os testes, porém o Zend Framework 2 não dá suporte para a separação entre um ambiente de teste e um de desenvolvimento separados de forma simples. Portanto foi necessário criar um script para facilitar a execução dos testes e para evitar erros. É necessário apenas o seguinte comando para rodar os testes:
O script aceita as mesmas opções que o binário do behat, o seguinte comando lista as opções:
Caso os testes necessitem de Selenium2 rodando em background, o seguinte comando tem a função de inicializá-lo:
Configurações Opcionais
Abaixo temos um exemplo de uma configuração mais completa:
Os campos acima tem os seguintes efeitos:
- fixtures_namespace: O namespace das fixtures, caso omitido o padrão é Application\Fixture.
- entities_namespace: O namespace padrão das entidades, caso omitido o padrão é Application\Entity. É importante notar que é possível especificar um namespace para cada entidade dentro da opção fixtures.
- fixtures
- Nome de uma entidade:
- identifier: Campo que identifica a entidade, caso omitido o padrão é id.
- entity_name: Nome completo da entidade, caso omitido o padrão é o namespace definido em entities_namespace junto com o nome simples da entidade.
- base: Lista que contém as entidades que serão carregadas sempre que rodar os testes.
- Nome de uma entidade:
Doctrine Fixtures
Uma importante função deste repositório é facilitar a criação de entidades na base de teste de forma simples e dinâmica através de fixtures como essa:
Parâmetros
Como pode ser visto no exemplo anterior, uma fixture deve difinir seus atributos básicos. Os atributos com valores simples, ou seja, que não fazem referência à outras entidades devem ser informados no atributo params. Este campo deve conter um hash no qual a chave indica o nome do atributo e o valor indica o valor do atributo.
Para o exemplo da nossa fixture de usuário, as chaves do array são pensadas de forma a “casar” com os métodos de acesso do Doctrine, ou seja, durante a criação da entidade a biblioteca executará os seguintes comandos para a criação de um usuário:
Por isso, é importante que as chaves sejam as mesmas que os campos da entidade e que os métodos de acesso existam.
Algumas vezes o valor de um atributo não é tão simples quanto apenas um número ou uma string e é necessário fazer algum tratamento para gerar o valor (valores temporais são os mais comuns nessa categoria). Para isso é necessário definir um callback da seguinte forma:
Assim a factory da fixture vai chamar a função definida na chave callback com o parâmetro definido na chave value. o callback aceita tudo que a função nativa "call_user_func" aceita no seu primeiro parâmetro.
Associações
Quando uma fixture faz referência a outra entidade, é possível fazer referência a uma outra fixture. Assumindo que exista uma fixture como essa:
Para criar a associação é preciso instanciar um novo campo de nossa fixture como neste exemplo:
A chave do array faz referência ao campo da entidade do doctrine (Neste caso o método setTipo() será invocado) e o valor faz referência ao nome simples da classe da fixture, mas com a primeira letra minúscula. então “tipoUsuario” é o nome da fixture cuja classe é “Application/Fixture/TipoUsuario”. Obviamente é possível fazer inúmeras associações
Aspectos
Provavelmente nos seus testes você precisará de diferentes versões de uma mesma entidade, ou de instâncias diferentes de uma mesma entidade, isso é feito com aspectos.
Para criar um aspecto é necessário instânciar mais um novo campo de nossa fixture, o campo traits. Vamos supor que você queira um “segundo” usuário para o seus testes, a fixture ficaria assim:
As chaves do array do atributo trait se referem aos nomes dos aspectos. É sugerido que sejam utilizados adjetivos para o nome, pois ficará mais claro nos testes de aceitação a diferência entre as duas instâncias. É importante notar que a única diferença entre o “segundo usuário” e o nosso usuário original é o email, todos os outros campos são preenchidos com os mesmos valores.
Os aspectos também podem ter associações diferentes da fixture base. Seja a fixture tipoUsuario desta forma:
Então um aspecto para um usuário administrador com uma senha diferente fica assim:
É importante notar que o aspecto vem antes do nome da fixture. Isso porque os testes de aceitação são escritos em inglês. Além disso, apesar de não ser o mais comum, também está correto em português.
Caso você queira que o usuário administrador também tenha um email diferente, não é necessário alterar a fixture, pois é possível concatenar os aspectos. a fixture “segundo administrador usuario” cria um usuário com os seguintes parâmetros (no formato json):
Algumas vezes precisamos de modificações mais simples na fixture original, ou então um grande número de entidades com modificações no mesmo campo. Para simplificar uma trait pode ser escrita da seguinte forma:
Passos de Testes
Este repositório contém um contexto de Behat com passos customizados.
Configuração do Behat
Para utilizar os passos da biblioteca é importante declarar o contexto da pandora, assim como o do Mink, caso queira usar os passos relacionados com requisições Ajax. Uma configuração exemplo é a seguinte:
Para usar o contexto deste repoistório a classe FeatureContext deve extender a classe PandoraContext, pois é necessário extender o método estático initializeZendFramework responsável por iniciar a aplicação. Segue um exemplo:
Criação de Entidades
Para utilizar as fixtures descritas na sessão anterior este repositório tem o seguinte passo de teste:
Este passo cria as entidades necessárias para o teste, como no exemplo abaixo.
Perceba que o parâmetro do passo segue a mesma estrutura de quando referenciamos uma fixture nos aspectos, ou seja, primeiro os aspectos (adjetivos), depois o nome da fixture.
Alteração de Entidades
Para alterar uma fixture já carregada use este paddo
Este passo altera uma entidade já criada. O valor é passado para a entidade como uma string com a excessão de "null" e "false"
Passos Adicionais
Além do passo de criação de entidades, essa biblioteca contém outros passos adicionais.
Passos de API
Then the response should contain json with this format:
- Recebe um JSON como parâmetro.
- Assume que a resposta já foi enviada e está no formato JSON.
- Compara cada elemento do JSON da resposta com o JSON informado usando a marcação do PHPmacher
- Exemplo:
Mais em breve ...
Expansões do PHPMatcher
Count
Verifica se um array contém um certo número de elementos.
exemplo:
panToday
Verifica se uma data tem um valor relativo a data de execução do teste. o formato é o mesmo do que o método
\DateTime::modify
exemplo:
All versions of pandora-testes with dependencies
zendframework/zendframework Version >=2.1.5
doctrine/doctrine-module Version >=0.9.0
doctrine/doctrine-orm-module Version >=0.9.0
doctrine/data-fixtures Version 1.*
behat/web-api-extension Version dev-master
behat/mink-extension Version ^2.0@dev
behat/mink-selenium2-driver Version ~1.3.1
coduo/php-matcher Version 2.0.1
behat/mink Version 1.7.0