Contao es un sistema de gestión de contenidos PHP de código abierto para personas que desean un sitio web profesional y fácil de mantener. Visite el sitio web del proyecto para obtener más información.
El caso de prueba de Contao proporciona un caso de prueba de PHPUnit con algunos métodos útiles para probar Contao. Ejecute php composer.phar require --dev contao/test-case
para instalar el paquete y luego usarlo en sus clases de prueba:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
El método getContainerWithContaoConfiguration()
se burla de un contenedor Symfony con la configuración predeterminada de la extensión principal de Contao.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
También puede configurar un directorio de proyecto:
$ 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"
El método mockContaoFramework)
se burla de un marco Contao inicializado.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
El método agrega automáticamente un adaptador de configuración con la configuración de Contao:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
Opcionalmente puedes agregar más adaptadores como argumento:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
El adaptador de configuración proporcionado sobrescribirá el adaptador de configuración predeterminado.
El método mockAdapter()
simulará un adaptador con los métodos dados.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
Los adaptadores con un valor de retorno simple como el anterior se pueden simplificar aún más:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
Este código hace exactamente lo mismo que el código anterior.
El método mockClassWithProperties()
se burla de una clase que usa los métodos mágicos __set()
y __get()
para administrar propiedades.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
Si la clase de la que se va a burlar es de solo lectura, opcionalmente puedes pasar las propiedades como argumento del constructor:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
Si necesita llamar a un método de la clase original, puede pasar el nombre del método como tercer argumento. El objeto simulado resultante será un objeto simulado parcial sin los métodos dados.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
mockTokenStorage()
simula un almacenamiento de tokens con un token que devuelve un usuario back-end o front-end de Contao.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
El método getTempDir()
crea un directorio temporal basado en el nombre de la clase de prueba y devuelve su ruta.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
El directorio se eliminará automáticamente después de que se hayan ejecutado las pruebas. Para que esto funcione, asegúrese de llamar siempre al método principal tearDownAfterClass()
si define el método en su clase de prueba.
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}