Contao est un système de gestion de contenu PHP open source destiné aux personnes qui souhaitent un site Web professionnel facile à entretenir. Visitez le site Web du projet pour plus d’informations.
Le scénario de test Contao fournit un scénario de test PHPUnit avec quelques méthodes utiles pour tester Contao. Exécutez php composer.phar require --dev contao/test-case
pour installer le package, puis utilisez-le dans vos classes de test :
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
La méthode getContainerWithContaoConfiguration()
simule un conteneur Symfony avec la configuration par défaut de l'extension principale Contao.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
Vous pouvez également définir un répertoire de projet :
$ 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"
La méthode mockContaoFramework)
simule un framework Contao initialisé.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
La méthode ajoute automatiquement un adaptateur Config avec les paramètres Contao :
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
Vous pouvez éventuellement ajouter d'autres adaptateurs comme argument :
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
L'adaptateur de configuration donné écrasera l'adaptateur de configuration par défaut.
La méthode mockAdapter()
simulera un adaptateur avec les méthodes données.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
Les adaptateurs avec une valeur de retour simple comme ci-dessus peuvent être encore simplifiés :
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
Ce code fait exactement la même chose que le code ci-dessus.
La méthode mockClassWithProperties()
se moque d'une classe qui utilise les méthodes magiques __set()
et __get()
pour gérer les propriétés.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
Si la classe à moquer est en lecture seule, vous pouvez éventuellement transmettre les propriétés comme argument du constructeur :
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
Si vous devez appeler une méthode de la classe d'origine, vous pouvez transmettre le nom de la méthode comme troisième argument. L'objet fictif résultant sera un objet fictif partiel sans la ou les méthodes données.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
Le mockTokenStorage()
simule un stockage de jetons avec un jeton renvoyant soit un utilisateur back-end ou front-end de Contao.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
La méthode getTempDir()
crée un répertoire temporaire basé sur le nom de la classe de test et renvoie son chemin.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
Le répertoire sera automatiquement supprimé une fois les tests exécutés. Pour que cela fonctionne, assurez-vous de toujours appeler la méthode parent tearDownAfterClass()
si vous définissez la méthode dans votre classe de test !
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}