Contao é um sistema de gerenciamento de conteúdo PHP de código aberto para pessoas que desejam um site profissional e fácil de manter. Visite o site do projeto para mais informações.
O caso de teste Contao fornece um caso de teste PHPUnit com alguns métodos úteis para testar Contao. Execute php composer.phar require --dev contao/test-case
para instalar o pacote e então use-o em suas classes de teste:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
O método getContainerWithContaoConfiguration()
simula um contêiner Symfony com a configuração padrão da extensão principal Contao.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
Você também pode definir um diretório de projeto:
$ container = $ this -> getContainerWithContaoConfiguration ( ' /tmp ' );
echo $ container -> getParameter ( ' kernel.project_dir ' ); // will output "/tmp"
echo $ container -> getParameter ( ' kernel.root_dir ' ); // will output "/tmp/app"
echo $ container -> getParameter ( ' kernel.cache_dir ' ); // will output "/tmp/var/cache"
O método mockContaoFramework)
simula uma estrutura Contao inicializada.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
O método adiciona automaticamente um adaptador Config com as configurações do Contao:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
Opcionalmente, você pode adicionar mais adaptadores como argumento:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
O adaptador de configuração fornecido substituirá o adaptador de configuração padrão.
O método mockAdapter()
irá simular um adaptador com os métodos fornecidos.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
Adaptadores com um valor de retorno simples como acima podem ser ainda mais simplificados:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
Este código faz exatamente o mesmo que o código acima.
O método mockClassWithProperties()
simula uma classe que usa métodos mágicos __set()
e __get()
para gerenciar propriedades.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
Se a classe a ser simulada for somente leitura, você poderá opcionalmente passar as propriedades como argumento do construtor:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
Se precisar chamar um método da classe original, você pode passar o nome do método como terceiro argumento. O objeto simulado resultante será um objeto simulado parcial sem o(s) método(s) fornecido(s).
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
O mockTokenStorage()
simula um armazenamento de token com um token retornando um back-end ou usuário front-end do Contao.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
O método getTempDir()
cria um diretório temporário baseado no nome da classe de teste e retorna seu caminho.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
O diretório será removido automaticamente após a execução dos testes. Para que isso funcione, certifique-se de sempre chamar o método pai tearDownAfterClass()
se você definir o método em sua classe de teste!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}